【问题标题】:Add a different element to ArrayAdapter/ListView向 ArrayAdapter/ListView 添加不同的元素
【发布时间】:2014-04-24 01:57:32
【问题描述】:

我有一个由 ArrayAdapter 填充的 ListView:

someListView.setAdapter(adapter);

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

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

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

我试图在数组的位置 0 处插入一个虚拟元素,并修改适配器的 getView() 以便 if (position == 0) return myUniqueView,但这以某种方式搞砸了整个列表视图:项目不显示,东西到处乱跳地点,元素之间的巨大差距等。

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

【问题讨论】:

  • 在返回位置之前再次为位置 0 充气。或发布你完整的适配器代码来编写soln 4 u。

标签: android android-listview


【解决方案1】:

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

mListView.addHeaderView(viewToAdd);

就是这样。

ListView Headers API
Tutorial

【讨论】:

  • 那是真的!只要确保在setAdapter() 之前致电addHeaderView(),我就准备好了!它滚动和一切!非常感谢!!
【解决方案2】:

【讨论】:

    【解决方案3】:

    在您的适配器中添加对位置的检查

    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
     }
    } 
    

    【讨论】:

    • 谢谢,不过我在原帖里说过,这个我已经试过了。
    • 添加您的尝试或您的适配器,以便我们更详细地了解
    • 像这样弄乱位置编号是非常危险的。您实际上打破了 ArrayAdapter 内部采取的许多假设。你能让它工作吗...是的,但你需要重载许多其他方法以确保添加、删除、检索项目占位置偏移量。因此,为什么它可能不适用于 user1032613
    • 覆盖 getItemViewTypegetView 就足够了
    猜你喜欢
    • 2021-08-16
    • 2016-07-18
    • 1970-01-01
    • 2023-03-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多