Listview重复操作

时间:2012-02-11 20:41:49

标签: java android listview

晚上好StackOverflow

这次我正在与一个包含TextViews的ListView进行斗争。

我添加一个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);
        }
    });

正如你所看到我切换文本的颜色,它可以工作..但是,它一次可以处理几个项目,即使我只点击一个项目。因此,当我点击第一个项目时,它变为绿色,然后有六个白色项目,第7个项目是绿色,但我从未点击过第7个项目!!

第1项 - 点击 - 绿色
item2 - 未点击 - 白色
item3 - 未点击 - 白色
item4 - 未点击 - 白色
item5 - 未点击 - 白色
item6 - 未点击 - 白色
item7 - 未点击 - 绿色
item8 - 未点击 - 白色
item9 - 未点击 - 白色
等...

这种模式继续存在于所有列表中。

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

这是一个截图: List Problem

第一张图片:什么都没做 第二张图片:我点击了'AK Kusine' 第三张图片:我向下滚动,'Allan Malka'也被更改了..

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

3 个答案:

答案 0 :(得分:1)

这是因为getView方法会回收您的视图以优化性能。 在适配器中实现getView(int position, View convertView, ViewGroup parent)方法(因此需要扩展适配器),使其获得convertView并根据位置将其设置为绿色或白色。

观看this以获取详细说明。它可能看起来很长,但它非常有用。

答案 1 :(得分:0)

这可能是由于重新绘制ListView时搞砸了一些东西。一般来说,如果你只是在你的数据上设置某种标志表明它应该是绿色,那就更好了,然后在你的ListView.getView()中你会有这样的东西

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

答案 2 :(得分:0)

我相信它因为android重用listview中的视图来最小化内存占用。当您选择列表中显示的第一个项目时,其textview设置为绿色,但是当您滚动列表并且第一个项目不可见时,实际上它再次显示为您的第7个项目并且仍将其文本设置为绿色。为避免这种情况,您可以简单地(默认情况下)将您的textview设置为适配器的getView中的白色并希望它能够正常工作