【问题标题】:Android Listview with different layout for each row depeding on rows values根据行值,每行具有不同布局的 Android Listview
【发布时间】:2013-04-21 11:55:42
【问题描述】:

我正在尝试确定让单个 Listview 包含不同行样式的最佳方式。

我搜索了很多,发现了一些使用getViewTypeCount()getItemViewType(int position) 的技巧,让列表视图布局根据位置而变化,这不是我想要的。

我要做的是根据行本身的 textview 值更改列表视图布局。

【问题讨论】:

标签: android listview baseadapter custom-adapter


【解决方案1】:

我不明白你为什么不能用上面列出的方法来实现这一点,如果你知道你有多少视图,然后为每个视图创建一个 .xml,然后在getView() 中根据需要膨胀相应的布局关于您的textview 的值。然后您返回这一行,它应该可以工作。

【讨论】:

    【解决方案2】:

    嗯,这正是您需要做的。

    覆盖getViewTypeCout 以返回您拥有的类型数量。
    覆盖getItemViewType 并根据位置(或要显示的项目)确定类型

    完成此操作后,只需在您的 getView 中使用它,如下所示:

    public View getView(int position, View convertView, ViewGroup parent) {
        if(getItemViewType(position) == FIRST_VIEW_TYPE) {
            // inflate first view
        } else {
            // inflate seconde view
        }
    }
    

    【讨论】:

      【解决方案3】:

      我搜索了很多,发现了一些使用 getViewTypeCount() 和 getItemViewType(int position) 的技巧,让 listview 布局根据位置发生变化,这不是我想要的。

      是的。

      我要做的是根据行本身的 textview 值更改列表视图布局。

      不,你不是。您正在尝试“更改列表视图布局依赖 [原文]”您计划放入“行本身的 textview 值”的某些文本。正如 mr_archano 所指出的,这个TextView 并没有神奇地获得价值——它获得了基于通过某种方式放在那里的东西的价值。

      因此:

      • 覆盖 getViewTypeCount() 以返回不同的可能行类型的数量

      • 根据您计划注入TextView文本覆盖getItemViewType()以返回一个从0到getViewTypeCount()-1的值

      • 确保您的 getView()bindView() 实现了解不同的视图类型并相应地处理它们

      【讨论】:

        【解决方案4】:

        ListView Row 中的 TextView 的内容必须来自您定义的一些数据(我假设可能是 ArrayList 或类似的数据),所以您要做的就是检查您要绘制的视图类型绘制 ROW 之前的数据,这是在 getView() 方法上完成的。

        getView() 在 ListView 想要呈现给定元素时调用,您认为它与位置无关,但确实如此。您在绘制之前知道 TextView 的内容,因此解析该值并在 getView 中动态使用您想要的布局类型;)。

        如果还不清楚,请阅读:Android custom listview row

        【讨论】:

          猜你喜欢
          • 2013-11-12
          • 2011-06-14
          • 2012-07-23
          • 1970-01-01
          • 2014-01-22
          • 1970-01-01
          • 2012-07-02
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多