Android ListView的使用技巧

在此总结下所学的ListView知识。首先先上效果图。                       

项目中配置了 ButterKnife,具体配置方法可以参考 http://www.cnblogs.com/whoislcj/p/5620128.html 这篇博客。

接着是主界面的布局activity_main,主要存放一个顶部标题和一个ListView。

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical"
    tools:context="com.example.listviewdemo.MainActivity">

    <RelativeLayout
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:background="@color/colorPaleBlue">

        <TextView
            android:id="@+id/txtView_title"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:gravity="center"
            android:text="ONE PIECE"
            android:textSize="35dp" />

        <ImageView
            android:id="@+id/img_change"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_alignParentRight="true"
            android:layout_centerVertical="true"
            android:layout_marginRight="5dp"
            android:src="@mipmap/default_change"
            android:visibility="gone" />
    </RelativeLayout>

    <View
        android:layout_width="match_parent"
        android:layout_height="1dp"
        android:background="@android:color/background_light" />

    <ListView
        android:id="@+id/lstView_main"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:layout_marginLeft="5dp"
        android:layout_marginRight="5dp"
        android:background="@color/colorPaleBlue"
        android:divider="@android:color/background_light"
        android:dividerHeight="1dp"
        android:scrollbars="none" />

</LinearLayout>

主界面的话,主要是对适配器进行一些操作。代码如下:

package com.example.listviewdemo;

import android.os.Bundle;
import android.support.v7.app.AppCompatActivity;
import android.widget.ImageView;
import android.widget.ListView;
import android.widget.TextView;
import android.widget.Toast;

import com.example.listviewdemo.adapter.OnePieceAdapter;
import com.example.listviewdemo.bean.OnePieceBean;

import java.util.ArrayList;

import butterknife.BindView;
import butterknife.ButterKnife;

public class MainActivity extends AppCompatActivity {

    @BindView(R.id.lstView_main)
    ListView lstViewMain;
    @BindView(R.id.txtView_title)
    TextView txtViewTitle;
    @BindView(R.id.img_change)
    ImageView imgChange;
    /**
     * 数据集
     */
    private ArrayList<OnePieceBean> mData = new ArrayList<OnePieceBean>();
    // 头布局的高度
    private int headerHeight;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        //绑定View
        ButterKnife.bind(this);
        //初始化
        initData();
        //初始化数据适配器
        OnePieceAdapter adapter = new OnePieceAdapter(this, mData);
        //设置适配器
        lstViewMain.setAdapter(adapter);
        //点击监听
        adapter.setOnItemOnclickListener(new OnePieceAdapter.OnItemOnclickListener() {
            @Override
            public void ItemOnclickListener(OnePieceBean item) {
                Toast.makeText(MainActivity.this, "我是" + item.getName(), Toast.LENGTH_SHORT).show();
            }
        });

        lstViewMain.setSelection(1);
    }

    private void initData() {
        mData.add(new OnePieceBean("路飞", R.mipmap.op01, "船长,成为海贼王的男人", "$500,000,000-"));
        mData.add(new OnePieceBean("索隆", R.mipmap.op02, "副船长,世界第一的大剑豪", "$320,000,000-"));
        mData.add(new OnePieceBean("乌索普", R.mipmap.op03, "大骗子,勇敢的海上战士", "$200,000,000-"));
        mData.add(new OnePieceBean("山治", R.mipmap.op04, "厨师,要找到all blue", "$177,000,000-"));
        mData.add(new OnePieceBean("娜美", R.mipmap.op05, "航海士,要找到财宝", "$66,000,000-"));
        mData.add(new OnePieceBean("乔巴", R.mipmap.op06, "医生,是一只爱吃棉花糖的驯鹿", "$100-"));
        mData.add(new OnePieceBean("罗宾", R.mipmap.op07, "恶魔之子,要找到历史正文", "%130,000,000-"));
        mData.add(new OnePieceBean("弗兰奇", R.mipmap.op08, "改造人,super..", "$94,000,000-"));
        mData.add(new OnePieceBean("布鲁克", R.mipmap.op09, "灵魂之王,活着真好", "$83,000,000-"));
        mData.add(new OnePieceBean("艾斯", R.mipmap.op10, "火拳艾斯,路飞的结拜哥哥", "$500,000,000-"));
    }
}

自定义了一个bean用于存放数据,代码如下:

package com.example.listviewdemo.bean;

/**
 * Created by 老王 on 2017/1/9.
 */
public class OnePieceBean {

    private String name;
    private int imgUrl;
    private String detail;
    private String reward;

    /**
     * @param name   姓名
     * @param imgUrl 图片url
     * @param detail 详细描述
     * @param reward 赏金
     */
    public OnePieceBean(String name, int imgUrl, String detail, String reward) {
        this.name = name;
        this.imgUrl = imgUrl;
        this.detail = detail;
        this.reward = reward;
    }

    public String getName() {
        return name;
    }

    public int getImgUrl() {
        return imgUrl;
    }

    public String getDetail() {
        return detail;
    }

    public String getReward() {
        return reward;
    }
}

通过集合的方法把数据保存起来,传入到适配器中,适配器的代码如下:

package com.example.listviewdemo.adapter;

import android.content.Context;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.BaseAdapter;
import android.widget.ImageView;
import android.widget.RelativeLayout;
import android.widget.TextView;

import com.example.listviewdemo.R;
import com.example.listviewdemo.bean.OnePieceBean;

import java.util.ArrayList;

/**
 * Created by 老王 on 2017/1/9.
 */
public class OnePieceAdapter extends BaseAdapter {

    private Context context;
    private LayoutInflater inflater;
    private ArrayList<OnePieceBean> mData;

    OnItemOnclickListener onItemOnclickListener = null;

    public interface OnItemOnclickListener {
        void ItemOnclickListener(OnePieceBean item);
    }

    public void setOnItemOnclickListener(OnItemOnclickListener onItemOnclickListener) {
        this.onItemOnclickListener = onItemOnclickListener;
    }

    public OnePieceAdapter(Context context, ArrayList<OnePieceBean> mData) {
        this.context = context;
        inflater = LayoutInflater.from(context);
        this.mData = mData;
    }

    @Override
    public int getCount() {
        return mData.size();
    }

    @Override
    public Object getItem(int i) {
        return mData.get(i);
    }

    @Override
    public long getItemId(int i) {
        return i;
    }

    @Override
    public View getView(final int i, View view, ViewGroup viewGroup) {
        final ViewHolder holder;
        if (view == null) {
            holder = new ViewHolder();

            view = inflater.inflate(R.layout.one_piece, null);

            holder.txtViewName = (TextView) view.findViewById(R.id.txtView_name);
            holder.imgUrl = (ImageView) view.findViewById(R.id.img_url);
            holder.txtViewDetail = (TextView) view.findViewById(R.id.txtView_detail);
            holder.txtViewReward = (TextView) view.findViewById(R.id.txtView_reward);
            holder.rlOp = (RelativeLayout) view.findViewById(R.id.rl_op);

            view.setTag(holder);
        } else {
            holder = (ViewHolder) view.getTag();
        }

        final OnePieceBean item = mData.get(i);

        holder.txtViewName.setText(item.getName());
        holder.imgUrl.setBackgroundResource(item.getImgUrl());
        holder.txtViewDetail.setText(item.getDetail());
        holder.txtViewReward.setText(item.getReward());

        if (onItemOnclickListener != null) {
            holder.rlOp.setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View view) {
                    onItemOnclickListener.ItemOnclickListener(item);
                }
            });
        }

        return view;
    }

    public class ViewHolder {
        RelativeLayout rlOp;
        TextView txtViewName;
        ImageView imgUrl;
        TextView txtViewDetail;
        TextView txtViewReward;
    }
}

适配器中还加载了一个布局one_piece.xml,用于存放图片,人物姓名和人物介绍等信息。布局代码如下:

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@+id/rl_op"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:background="@color/colorPaleBlue">

    <ImageView
        android:id="@+id/img_url"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content" />

    <TextView
        android:id="@+id/txtView_name"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_toRightOf="@id/img_url"
        android:paddingTop="10dp" />

    <TextView
        android:id="@+id/txtView_detail"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignBottom="@id/img_url"
        android:layout_toRightOf="@id/img_url"
        android:paddingBottom="10dp" />


    <TextView
        android:id="@+id/txtView_reward"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignParentRight="true"
        android:paddingRight="5dp"
        android:paddingTop="20dp" />

</RelativeLayout>

这样就达到了listView的基本显示效果了。对于具体的代码操作要看客自己手动操作下方能有更深刻的认识。

猜你喜欢

转载自blog.csdn.net/qq_21200053/article/details/54310670