手记

Android的listview使用之2,自定义适配器

前面我们已经了解到了Listview的最基本用法,是不是觉得只是展示单纯的文字信息比较单调,那我们现在就马上来看listview使用之,自定义适配器,使用这个以后,就可以展示各种各样的数据啦。

先看效果 

第一步 新建一个类 继承BaseAdapter  可以看到必须实现四个方法 下面来一一解释

第一个 getCount方法   返回整个list里面数据的个数

第二个getItem方法   返回没一个Item的数据

第三个 getItemId方法 返回每个Item的id

第四个,是最重要的方法getView方法 绘制视图 调用次数由第一个方法决定 返回每个视图

我现在的数据是一张图片和一个字符串

所以 需要一个对象来保存没一个视图的数据

下面是对象类

public class Bean {
    private String name;
    private int resid;

    public Bean(String name, int resid) {
        this.name = name;
        this.resid = resid;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public int getResid() {
        return resid;
    }

    public void setResid(int resid) {
        this.resid = resid;
    }
下面是适配器类
package comiptv.example.vincent.listview;

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.TextView;

import java.util.List;

/**
 * Created by liliu on 2016/8/25.
 */
public class MyAdapter extends BaseAdapter{
    private LayoutInflater mInflater;
    List<Bean> list;
    public MyAdapter(Context context,List<Bean> list) {
        mInflater=LayoutInflater.from(context);//得到一个LayoutInfalter对象用来导入布局
        this.list=list;
    }

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

    @Override
    public Object getItem(int position) {
        return null;
    }

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

    @Override
    public View getView(int position, View convertView, ViewGroup parent) {
        convertView = mInflater.inflate(R.layout.my_listview_item, null);//通过mInflater来加载布局
        ImageView iv = (ImageView) convertView.findViewById(R.id.iv);//找到对应的控件
        TextView tv = (TextView) convertView.findViewById(R.id.tv);
        iv.setImageResource(list.get(position).getResid());//根据position下标来设置控件的内容
        tv.setText(list.get(position).getName());
        return convertView;
    }
}

我们需要使用自定义的适配器需要创建数据源,在这里仍然使用本地数据

下面是MainActivity 

public class MainActivity extends AppCompatActivity {

    private ListView lv;
    List<Bean> list;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        lv = (ListView) findViewById(R.id.lv);
        list=new ArrayList<>();//存储对象的集合
        int [] resids={R.mipmap.a1,R.mipmap.a2,R.mipmap.a3,R.mipmap.a4,R.mipmap.a5,
                R.mipmap.a6,R.mipmap.a7,R.mipmap.a8,R.mipmap.a9,R.mipmap.a10,};//图片的id数组
        for (int i=0;i<resids.length;i++){
            Bean bean = new Bean("item" + i, resids[i]);//创建对象存入数据
            list.add(bean);//数据存入集合中
        }
        MyAdapter myAdapter = new MyAdapter(this, list);//新建适配器并且传入数据的集合
        lv.setAdapter(myAdapter);//设置适配器
    }

下面是适配器中使用到的布局

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
              android:orientation="horizontal"
              android:layout_width="wrap_content"
              android:layout_height="wrap_content">
    <ImageView
        android:id="@+id/iv"
        android:layout_width="200dp"
        android:layout_height="200dp"/>
    <TextView
        android:id="@+id/tv"
        android:textSize="30sp"
        android:gravity="center"
        android:layout_width="match_parent"
        android:layout_height="match_parent"/>

</LinearLayout>

好了今天的内容就到这里,后续我会加上网络加载和适配器优化等内容,大家有什么建议在下方留言哦。

原文链接:http://www.apkbus.com/blog-843025-61546.html

0人推荐
随时随地看视频
慕课网APP