我有一个由ArrayAdapter填充的ListView:
someListView.setAdapter(adapter);
适配器中的每个元素都使用相同的layout.xml进行充气。现在我想在ListView的开头添加一个不同类型的元素(使用不同的布局文件进行膨胀)。
我想要实现的是,在列表视图中的所有其他元素之上有一个特殊元素,但也可以滚动列表(如果用户向下滚动,则从顶部退出屏幕)。
我已尝试将新元素添加到数组中,但它是一种不同的类型,因此无法正常工作。
我试图在位置0处向数组插入一个虚拟元素,然后修改适配器getView()
以便if (position == 0) return myUniqueView
,但这会搞砸整个列表视图不知何故:物品没有显示,物品在各处跳跃,元素之间存在巨大差距等等。
我开始认为实现我想要的最佳实践不是通过编辑数组适配器。但我不知道如何正确地做到这一点。
答案 0 :(得分:2)
你不需要做任何特别的事情来做你所要求的。 Android已经为每个ListView提供了内置的行为。请致电:
mListView.addHeaderView(viewToAdd);
就是这样。
答案 1 :(得分:0)
在你的适配器中添加一个位置检查
private static final int LAYOUT_CONFIG_HEADER = 0;
private static final int LAYOUT_CONFIG_ITEMS = 1;
int layoutType;
@Override
public int getItemViewType(int position) {
if (position== 0){
layoutType = LAYOUT_CONFIG_HEADER;
} else {
layoutType = LAYOUT_CONFIG_ITEMS;
}
return layoutType;
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
View row = convertView;
LayoutInflater inflater = null;
int layoutType = getItemViewType(position);
if (row == null) {
if (layoutType == LAYOUT_CONFIG_HEADER) {
//inflate layout header
}
} else {
//inflate layout of others rows
}
}
答案 2 :(得分:0)
确切地知道,但它可能有用