我正在尝试确定包含不同行样式的单个Listview
的最佳方法。
我搜索了很多并使用getViewTypeCount()
和getItemViewType(int position)
找到了一些技巧,让listview布局根据位置而改变,这不是我正在寻找的。
我要做的是更改listview布局,取决于行本身的textview值。
答案 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布局根据位置而改变,而不是我正在寻找的。 p>
是的,是的。
我尝试做的是根据行本身的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