您的位置:首页 > 其它

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里的键值对,可否都用模板类代替
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: