2012-02-11 50 views
0

晚上好StackOverflow列表查看重复行动

这次我正在与ListView包含TextViews战斗。

我添加了一个OnItemClick监听器。

v.setOnItemClickListener(new OnItemClickListener() { 

     public void onItemClick(AdapterView<?> arg0, View arg1, int arg2, 
       long arg3) { 
      TextView tvItm = (TextView) arg1; 
      int Col = tvItm.getTextColors().getDefaultColor(); 
      if (Col == Color.WHITE) 
       tvItm.setTextColor(Color.GREEN); 
      else 
       tvItm.setTextColor(Color.WHITE); 
     } 
    }); 

正如你可以看到我切换文本的颜色,它的作品。但是,它可以在几个项目的时间,即使我只点击一个项目。所以当我点击第一个项目时,它会变成绿色,然后是六个白色项目,第七个项目是绿色的,但我从未点击过第七个项目!

物品1 - 点击 - 绿色
ITEM2 - 不点击 - 白
项目3 - 不点击 - 白
ITEM4 - 不点击 - 白
ITEM5 - 不点击 - 白
ITEM6 - 不点击 - 白
item7 - 不点击 - 绿色
item8 - 不点击 - 白
item9 - 不点击 - 白
等..

该模式继续为所有列表。

此外,如果我快速地上下滑动列表,则模式会上下移动1到2个项目。

以下是截图: List Problem

第一张图片:什么都不做
2图像:我点击 'AK Kusine'
第三图像:我向下滚动,“艾伦马尔卡'也被改变了。

如果我在监听器中设置了一个断点,它只会在列表中每次点击一次就停止。 是什么导致了这种行为?更重要的是,我该如何解决它?

回答

1

这是因为getView方法会回收您的视图以优化性能。 实现您的适配器getView(int position, View convertView, ViewGroup parent)方法(所以你需要扩展一个适配器)的方式,它得到了convertView并使其根据位置绿色或白色..

关注this了详细的解释。它可能看起来很长,但它非常有用。

+0

的确是一个有用的视频,并帮助解决问题:) – f2lollpll 2012-02-11 23:30:03

0

这可能是由于重绘ListView时发生了某些事情。一般情况下,这是如果你只是在为你的数据设置某些种类标志指示它应该是绿色的更好,然后在你的ListView.getView()你有这样的事情

if(listItem.isGreen()) 
    view.setColor(Color.GREEN); 
0

我相信它,因为android重新使用listview中的视图来最大限度地减少内存占用。当您选择列表中显示的第一个项目时,其textview设置为绿色,但是当您滚动列表并且第一个项目不可见时,实际上它会再次作为第七个项目出现,并且仍将其文本设置为绿色。为了避免这种情况,你可以简单地(默认)设置你的TextView以白色在适配器的getView,并希望它应该工作

+0

我会考虑这是否正确以及。感谢您的回答。虽然C.d提供了一个非常有用的链接;) – f2lollpll 2012-02-11 23:31:51