Android:Adapter组件的使用笔记

菜鸡写的,可能有错,欢迎指正。

学校老师太坑,自己写的书代码竟然不加注释,只能自学组件方面内容了。

一、Adapter的作用:

传递ListView,GridView,Spinner等组件的各个位置的具体内容。

二、BaseAdapter

Android:Adapter组件的使用笔记

三、自定义的Adapter

记录最基本的用法
1.数据成员:数据源(数组),上下文,需要绑定的组件类型

public class GoodsAdapter extends BaseAdapter {
    private Context context;//上下文
    private ListView listView;
    private List<GoodsInfo> goodsList;
    //construct function
    public GoodsAdapter(Context context, ListView listView){
        this.context=context;
        this.listView=listView;
    }

    public void setData(List<GoodsInfo> data){
        goodsList=data;
    }

2.重写方法
主要重写getView方法,因为这个方法决定了每个列表项的内容。这个方法是绑定后自动调用的。 重写的思路:新建每个列表项的对应视图,然后通过一个静态类ViewHolder来设置视图内组件的具体内容,随后返回此视图。

	//convertView对应的是ListView中每个项的View是什么
    //通过ViewHolder来设置convertView的具体内容
    @Override
    public View getView(int position, View convertView, ViewGroup parent) {
        //获得列表项的的视图,用inflate方法获取,并设置布局
        convertView=View.inflate(context,R.layout.goods_item,null);
        ViewHolder holder=new ViewHolder(convertView);
        //每个位置的商品信息存放在对应的商品列表位置,已设置好
        GoodsInfo goodsInfo=goodsList.get(position);
        holder.setAttribute(goodsInfo);
        return convertView;
    }
  • ViewHolder的存在意义是优化,好像是可以做到复用view,节省内存。 其成员变量是布局中的各个组件
    //ViewHolder是用于优化且方便设置内容
    static class ViewHolder{
        //定义属性,对应布局文件中的各个组件。
        public ImageView img;
        public TextView title;
        public TextView desc;
        //得到对应位置组件实例
        public ViewHolder(View itemView){
            img=(ImageView)itemView.findViewById(R.id.imageView);
            title=(TextView)itemView.findViewById(R.id.title);
            desc=(TextView)itemView.findViewById(R.id.desc);
        }
        //设置组件的具体内容
        public void setAttribute(GoodsInfo goodsinfo){
            img.setImageResource(goodsinfo.getImgId());
            title.setText(goodsinfo.getTitle());
            desc.setText(goodsinfo.getDesc());
        }
    }

四、Adapter使用

  • 以ListView为例 :
    利用ListView创建Adapter对象后,Adapter对象来决定各个列表项内容是什么,然后再绑定回ListView对象。
    MainActivity中代码:
public class MainActivity extends AppCompatActivity {
    private List<GoodsInfo> goodsList;//商品信息列表
    private ListView listView;
    private GoodsAdapter goodsAdapter;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        initData();//创建商品列表,并初始化各个信息
        listView = (ListView) findViewById(R.id.listView);
        goodsAdapter = new GoodsAdapter(MainActivity.this,listView);
        goodsAdapter.setData(goodsList);
        listView.setAdapter(goodsAdapter);
    }
上一篇:RecyclerView替代ListView


下一篇:列表与适配器