前言
Android中的ListView
,大家可能已经很熟悉了,用起来也算是得心应手。可能你见过一个ListView
中展示了不同的布局,或许你会说,这种方式实现起来很简单,在item的布局文件中通过visibility
来动态显示、隐藏view,即可实现这种效果。
即使是我的同事,让他实现这样的不同布局,依然采用的是以上方式,完全不知道BaseAdapter
已经为我们提供了多种不同布局的item的实现方式。
声明一个继承BaseAdapter的Adapter
在子adapter中重写父类的getViewTypeCount
和getItemViewType
方法,顾名思义:
getViewTypeCount
表示不同的item布局类型的数量getItemViewType
表示不同布局的item的类型
class TypeAdapter extends BaseAdapter {
@Override
public int getCount() {
return list.size();
}
@Override
public int getItemViewType(int position) {
return list.get(position).getType();
}
@Override
public int getViewTypeCount() {
return 2;
}
@Override
public Object getItem(int position) {
return list.get(position);
}
@Override
public long getItemId(int position) {
return position;
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
ViewHolder holder;
if (convertView == null) {
switch (getItemViewType(position)) {
case 0:
convertView = LayoutInflater.from(MainActivity.this).inflate(R.layout.type1, null);
break;
case 1:
convertView = LayoutInflater.from(MainActivity.this).inflate(R.layout.type2, null);
break;
}
holder = new ViewHolder();
convertView.setTag(holder);
} else {
holder = (ViewHolder) convertView.getTag();
}
return convertView;
}
}
这样就可以在getView
方法中通过不同的view type,来inflate不同的item布局,后面对不同item的数据填充,都可以利用getItemViewType
进行分别设置。
效果
最终实现的效果如下:
![](https://img.haomeiwen.com/i1234624/a545fee2245582ff.png)
网友评论