原来的项目里有好多listview,为此为每个listview都单独写了adapter和item,现在设计改设计了,要求每个listview都能和微信通讯录一样有sortbar和分类栏,那么我原来的做法是给每个item上面添加上一个隐藏的分类栏,然后再adapter中选择要不要显示,但是现在listview太多了,这样效率很低,我要怎么设计代码才能方便的达到这个需求?
直接将 数据按照字母排序A_z,然后item分为两类 标题类型 和数据类型
适配器在判断数据的字母变化时,加入一个标题类型,用这种思路去做。github有很多这种demo,自己去找下
重新封装一个BaseListView
自己的风格最优雅
public abstract class MyBaseAdapter<T> extends BaseAdapter {
public List<T> list;
public Context context;
public MyBaseAdapter() {
}
public MyBaseAdapter(Context context, List<T> list) {
super();
this.context = context;
this.list = list;
}
@Override
public int getCount() {
return list.size();
}
@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) {
return createView(position, convertView, parent);
}
public abstract View createView(int position, View convertView,
ViewGroup parent);
}
重新封装一个自己的BaseAdapter就会好点
首先将数据按照字母顺序A-Z进行排序,得到List数据。listview的item布局为标题和内容,标题即为内容的首字母。在通常情况下为标题为隐藏状态,只有当在过渡节点下,才会显示字母标题