我是Java和Andriod开发的新手。
我的应用程序中有一个包含ListView
的视图然后我有一个继承自ArrayAdapter的自定义适配器
在getView方法的视图中,我返回一行,其中包含一些文本和一个复选框现在到目前为止这一切都很好,我的列表已填充,我可以检查我的项目,所有事件似乎都按预期启动。
我遇到的问题是我检查了前3个项目,然后我注意到第11个,第12个和第13个项目被检查了,当我滚动时,我看到它定期检查其他复选框似乎也在相同的模式。
如果我检查了大约10个复选框,那么它最终将检查列表中的所有项目大约80 ...
谁能解释我做错了什么?我不认为任何代码都有助于解释这一点,因为我没有在任何地方设置复选框的检查状态,这都是自己处理的,所以正在检查的事实项目令我感到困惑。
提前致谢
答案 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
将是正确的状态。