Android Listview,每行具有不同的布局,具体取决于行值

时间:2013-04-21 11:55:42

标签: android listview baseadapter custom-adapter

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

我搜索了很多并使用getViewTypeCount()getItemViewType(int position)找到了一些技巧,让listview布局根据位置而改变,这不是我正在寻找的。

我要做的是更改listview布局,取决于行本身的textview值。

4 个答案:

答案 0 :(得分:0)

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

答案 1 :(得分:0)

好吧,这正是你需要做的。

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

答案 2 :(得分:0)

  

我搜索了很多并使用getViewTypeCount()和getItemViewType(int position)找到了一些技巧,让listview布局根据位置而改变,而不是我正在寻找的。

是的,是的。

  

我尝试做的是根据行本身的textview值更改listview布局。

不,你不是。您正在尝试更改列表视图布局,而不是[sic] on"您打算将一些文本放入"行本身的文本视图值"。正如mr_archano指出的那样,这个TextView并没有神奇地获得一个值 - 它是基于通过某种方式放置的东西得到的值。

因此:

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

  • 根据您计划投放到getItemViewType() 文本,覆盖getViewTypeCount()-1以将值从0返回到TextView >

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

答案 3 :(得分:0)

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

当ListView想要渲染给定元素时,会调用

getView(),你认为它与位置无关,但确实如此。在绘制之前了解TextView内容,因此解析该值并动态使用getView中所需的布局类型;)。

如果仍然不清楚,请阅读此内容:Android custom listview row