菜鸡写的,可能有错,欢迎指正。
学校老师太坑,自己写的书代码竟然不加注释,只能自学组件方面内容了。
一、Adapter的作用:
传递ListView,GridView,Spinner等组件的各个位置的具体内容。
二、BaseAdapter
三、自定义的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);
}