总结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里的键值对,可否都用模板类代替
本文详细介绍了ListView的适配器BaseAdapter,强调了BaseAdapter在数据与视图结合中的作用,以及如何利用ViewHolder优化性能。通过重写getCount、getItem、getItemId和getView方法实现列表数据绑定。文章提供了基本步骤指导,包括设置布局、适配器、数据源和加载适配器,并附带具体代码示例和效果图。
221

被折叠的 条评论
为什么被折叠?



