0

我是 Java 和 Andriod 开发的新手。

我的应用程序中有一个视图,其中包含一个 ListView

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

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

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

我遇到的问题是我检查了前 3 个项目,然后我注意到第 11 个、第 12 个和第 13 个项目被选中,当我滚动时,我看到每隔一段时间,其他复选框似乎也以相同的模式被选中。

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

谁能解释我做错了什么?

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

提前致谢

4

2 回答 2

3

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

希望有所帮助:)

于 2012-07-16T22:08:04.950 回答
1

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

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

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

于 2012-07-16T22:11:52.083 回答