在我的 Android 应用程序中,我有一个包含 5 个元素的 ListView。我创建了一个自定义适配器,以更改 listView 的某些元素的背景。比如list view的第二个item还没有准备好,所以我想setBackground(Color.Gray)
,这样他就可以看起来像没做好一样。为了做到这一点,我在我的自定义适配器中重写了 ArrayAdapter 的 getView() 方法:
@Override
public View getView(int position, View convertView, ViewGroup parent) {
View v = super.getView(position, convertView, parent);
if(!itensAvailable[position]) v.setBackgroundColor(Color.Gray);
return v;
}
奇怪的是,无论我使用 bool 值 itensAvailable[position]
还是 !itensAvailable[position]
列表的第一个元素的背景总是改变的!除了第一个之外,列表中的所有其他元素都按预期运行。比那更奇怪,如果我这样做
if(position == 2) v.setBackgroundColor(Color.Gray);
它改变了位置 2 和第一个项目的背景!如果我这样做
if(position == 2) {
v.setBackgroundColor(Color.Gray);
System.out.println(v.getText());
}
更奇怪!仅打印位置 2 的文本,而不打印第一项的文本。
这是怎么回事?安卓漏洞?顺便说一句,我在 XOOM 3.2 Honeycomb 设备上对其进行了测试。
显然,如果我对这段 if 代码进行注释,第一项的背景不会发生变化。
最佳答案
很奇怪! 如果你写会发生什么:
@Override
public View getView(int position, View convertView, ViewGroup parent) {
View v = super.getView(position, convertView, parent);
if(!itensAvailable[position]) v.setBackgroundColor(Color.Gray);
else v.setBackgroundColor(Color.Transparent);
return v;
}
关于Android:第一个元素 ListView 表现得很奇怪,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8269945/