向ArrayAdapter / ListView添加不同的元素

时间:2014-04-24 01:57:32

标签: android android-listview

我有一个由ArrayAdapter填充的ListView:

someListView.setAdapter(adapter);

适配器中的每个元素都使用相同的layout.xml进行充气。现在我想在ListView的开头添加一个不同类型的元素(使用不同的布局文件进行膨胀)。

我想要实现的是,在列表视图中的所有其他元素之上有一个特殊元素,但也可以滚动列表(如果用户向下滚动,则从顶部退出屏幕)。

我已尝试将新元素添加到数组中,但它是一种不同的类型,因此无法正常工作。

我试图在位置0处向数组插入一个虚拟元素,然后修改适配器getView()以便if (position == 0) return myUniqueView,但这会搞砸整个列表视图不知何故:物品没有显示,物品在各处跳跃,元素之间存在巨大差距等等。

我开始认为实现我想要的最佳实践不是通过编辑数组适配器。但我不知道如何正确地做到这一点。

3 个答案:

答案 0 :(得分:2)

你不需要做任何特别的事情来做你所要求的。 Android已经为每个ListView提供了内置的行为。请致电:

mListView.addHeaderView(viewToAdd);

就是这样。

ListView Headers API
Tutorial

答案 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)

确切地知道,但它可能有用

https://github.com/chrisjenx/ParallaxScrollView