在我的Android应用程序中,我有一个包含5个元素的ListView。我创建了一个自定义适配器,以便更改listView的某些元素的背景。例如,列表视图的第二项还没有准备好,所以我想要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;
}
奇怪的是,无论我使用布尔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的文本,而不打印第一个项目中的文本。
发生了什么事? Android漏洞?顺便说一下,我在XOOM 3.2 Honeycomb设备上测试它。
显然,如果我对代码进行评论,那么第一项并没有改变它的背景。
答案 0 :(得分:2)
很奇怪! 如果你写的话会发生什么:
@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;
}
答案 1 :(得分:0)
我无法解释奇怪的行为。您可以尝试以下代码,看看它是否解决了您的问题 -
@Override
public View getView(int position, View convertView, ViewGroup parent) {
if (convertView == null) {
convertView = to the view to be displayed;
}
if(!itensAvailable[position]) convertView.setBackgroundColor(Color.Gray);
return convertView;
}
答案 2 :(得分:0)
我有完全相同的问题。确实很奇怪!
对我有用的是删除行
View v = super.getView(position, convertView, parent);
并改为使用 -
LayoutInflater inflater = LayoutInflater.from(getContext());
View v = inflater.inflate(R.layout.__my__layout__, parent, false);
.... more view manipulations ....
希望它有所帮助!