listview适配器Baseadapter

来源:互联网 发布:java arraylist源码 编辑:程序博客网 时间:2024/06/05 09:51

总结listview适配器Baseadapter

先吐槽一下自己,真真个可怕呀,说要学会listview结果半个月了,才….

Baseadapter基本介绍

  • listview需要把数据和视图结合在一起,Baseadapter便于重写
  • 为了有效的利用到视图convertview的视图缓存机制,减少频繁调用findViewById,使用ViewHolder绑定数据而使用到setTag方法
  • 重写方法:getCount(列表中多少行),getItem(位置上的对象),getItemId(位置行号),getView(每行的内容)

基本步骤:

设置布局–设置适配器–设置数据源–加载适配器
- tips:列表控件封装到Itemtips类里面,构造函数
- viewholder static类,适配器绑定数据源,根据上下文加载布局
- getView的写法:添加viewhoder、判断convertview是否空:是,LayoutInflater绑定Item视图,holder添加控件id,setTag;不是空,获取缓存标签getTag、返回convertview

具体代码:

封装Item控件

public class ItemTip {    public int ItemtipID;    public String Itemtitle;    public ItemTip(int itemtipID, String itemtitle) {        Itemtitle = itemtitle;        ItemtipID = itemtipID;    }}

MainActivity

public class MainActivity extends AppCompatActivity {    private ListView listView; @Override    protected void onCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);        setContentView(R.layout.activity_main);        listView= (ListView) findViewById(R.id.lv);        //创建适配器        //创建数据源getdata(),加载适配器        List<ItemTip>data=new ArrayList<>();        for(int i=0;i<20;i++){            data.add(new ItemTip(R.mipmap.ic_launcher,"this is"+i+"item"));        }        MyAdapter adapter=new MyAdapter(this,data);        //视图加载适配器        listView.setAdapter(adapter);    }}

MyAdapter

public class MyAdapter extends BaseAdapter {    private Context context;    private LayoutInflater inflater=null;    private  List<ItemTip>mlist;    public MyAdapter(Context context,List<ItemTip>list) { //添加构造函数,绑定数据源        mlist=list;        this.inflater=LayoutInflater.from(context);//根据上下文加载布局   }    @Override    public int getCount() {        return mlist.size();    }    @Override    public Object getItem(int i) {        return mlist.get(i);    }    @Override    public long getItemId(int i) {        return i;    }    @Override    public View getView(int i, View convertView, ViewGroup viewGroup) {        ViewHolder holder;        if(convertView==null){        holder=new ViewHolder();        convertView=inflater.inflate(R.layout.item,null);        holder.title= (TextView) convertView.findViewById(R.id.tv);        holder.picture= (ImageView) convertView.findViewById(R.id.iv);        convertView.setTag(holder);        }else{            holder= (ViewHolder) convertView.getTag();//        }        ItemTip tip=mlist.get(i);        holder.picture.setImageResource(tip.ItemtipID);        holder.title.setText(tip.Itemtitle);        return convertView;    }   static class ViewHolder{        ImageView picture;        TextView title;    }}

效果图
这里写图片描述

遗留问题:hashmap里的键值对,可否都用模板类代替

原创粉丝点击