以我的Navigation Drawer
为例 Gmail应用,我想要按部分分组的ListView
,类似于收件箱,所有标签
通过使用由"标头"分隔的多个ListView
来实现此行为TextView
(我必须手动构建),或者是Adapter
或ListView
支持的此部分分组行为?
答案 0 :(得分:0)
我不确定Gmail应用是如何实现此行为的,但似乎您应该使用自定义适配器。使用多个列表视图不是解决此问题的有效方法,因为人们希望将数据行(消息)保存在单个列表项中。
答案 1 :(得分:0)
不要使用多个ListView,它会使滚动内容搞乱。
您所描述的内容只能使用一个ListView +适配器with multiple item view types,如下所示:
public class MyAdapter extends ArrayAdapter<Object> {
// It's very important that the first item have a value of 0.
// If not, the adapter won't work properly (I didn't figure out why yet)
private int TYPE_SEPARATOR = 0;
private int TYPE_DATA = 1;
class Separator {
String title;
}
public MyAdapter(Context context, int resource) {
super(context, resource);
}
@Override
public boolean areAllItemsEnabled() {
return false;
}
@Override
public int getItemViewType(int position) {
if (getItem(position).getClass().isAssignableFrom(Separator.class)) {
return TYPE_SEPARATOR;
}
return TYPE_DATA;
}
@Override
public int getViewTypeCount() {
// Assuming you have only 2 view types
return 2;
}
@Override
public boolean isEnabled(int position) {
// Mark separators as not enabled. That way, the onclick and onlongclik listener
// won't be triggered for those items.
return getItemViewType(position) != TYPE_SEPARATOR;
}
}
您只需实现自己的getView方法即可正确呈现。