ListView中的复选框具有奇怪的检查行为

时间:2012-07-16 21:39:01

标签: java android android-listview android-checkbox

我是Java和Andriod开发的新手。

我的应用程序中有一个包含ListView

的视图

然后我有一个继承自ArrayAdapter的自定义适配器

在getView方法的视图中,我返回一行,其中包含一些文本和一个复选框

现在到目前为止这一切都很好,我的列表已填充,我可以检查我的项目,所有事件似乎都按预期启动。

我遇到的问题是我检查了前3个项目,然后我注意到第11个,第12个和第13个项目被检查了,当我滚动时,我看到它定期检查其他复选框似乎也在相同的模式。

如果我检查了大约10个复选框,那么它最终将检查列表中的所有项目大约80 ...

谁能解释我做错了什么?

我不认为任何代码都有助于解释这一点,因为我没有在任何地方设置复选框的检查状态,这都是自己处理的,所以正在检查的事实项目令我感到困惑。

提前致谢

2 个答案:

答案 0 :(得分:3)

这种情况正在发生,因为Android为了性能目的而回收列表项,在这里您可以解决此问题: ListView reusing views when ... I don't want it to

希望能提供帮助:)

答案 1 :(得分:1)

这是预期的行为。 ListView重用适配器中的视图。 所以你想要的是保留Set个“选定项目”并添加项目或在单击CheckBox时将其删除,然后在你的getView中添加以下代码:

if(mSelected.contains(getItem(position)) {
    checkBox.setChecked(true);
} else {
    checkBox.setChecked(false);
}

这样,当重用该行时,CheckBox将是正确的状态。