【问题标题】:Listview duplicate actionListview 重复操作
【发布时间】:2012-03-03 20:57:17
【问题描述】:

晚上好 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 个项目!

item1 - 点击 - 绿色
item2 - 未点击 - 白色
item3 - 未点击 - 白色
item4 - 未点击 - 白色
item5 - 未点击 - 白色
item6 - 未点击 - 白色
item7 - 未点击 - 绿色
item8 - 未点击 - 白色
item9 - 未点击 - 白色
等等……

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

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

这是一个屏幕截图:

第一张图片:什么都没做
第二张图片:我点击了“AK Kusine”
第三张图片:我滚动下来,“Allan Malka”也变了..

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

【问题讨论】:

    标签: java android listview


    【解决方案1】:

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

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

    【讨论】:

    • 确实是一个有用的视频,它帮助解决了问题:)
    【解决方案2】:

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

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

    【讨论】:

      【解决方案3】:

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

      【讨论】:

      • 我也会认为这是正确的。感谢您的回答。虽然 C.d 提供了一个非常有用的链接;)
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2014-03-20
      • 2018-01-03
      • 2017-03-31
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多