listview适配器Baseadapter
2017-06-13 16:15
232 查看
总结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里的键值对,可否都用模板类代替
相关文章推荐
- Android适配器之基于BaseAdapter定义AbslistView万能适配器
- android listview继承BaseAdapter,自定义的适配器,getView方法执行多组循环解决方式
- 使用ListView和AsyncTask、fastjson解析Json以及适配器BaseAdapter来实现下载网络的图片以及文字并显示出来
- Android学习第五天————ExpandableListView组件通过适配器BaseExpandableListAdapter实现两层列表项
- BaseAdapter 作为 ListView 适配器
- Android ListView适配器BaseAdapter中getItemViewType需要注意的问题
- 【Android】以BaseAdapter做适配器的ListView及其性能优化
- 自学安卓复习基础_之十(使用适配器BaseAdapter来实现listView的CRD)
- Android-ListView适配器BaseAdapter的使用和优化
- ListView 的三种适配器 BaseAdapter ArrayAdapter SimpleAdapter(3)
- 12,对ListView的适配器的封装BaseListAdapter
- 【Android】以BaseAdapter做适配器的ListView及其性能优化
- Android组件ListView的适配器BaseAdapter
- ListView 的三种适配器 BaseAdapter ArrayAdapter SimpleAdapter(1)
- listView适配器之BaseAdapter详解
- ListView 的三种适配器 BaseAdapter ArrayAdapter SimpleAdapter(2)
- 一句代码实现ListView图文加载的万能适配器BaseListViewAdapter<T>
- 自定义ListView适配器继承BaseAdapter
- ListView (3) 之适配器 ArrayAdapter/SimpleAdapter/BaseAdapter
- ListView适配器BaseAdapter