Android:第一个元素列表视图表现得很奇怪

时间:2011-11-25 13:37:14

标签: android android-listview android-3.0-honeycomb android-view

在我的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设备上测试它。

显然,如果我对代码进行评论,那么第一项并没有改变它的背景。

3 个答案:

答案 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 ....
希望它有所帮助!