嘿所有,我知道有很多实现自定义适配器的教程,但我不相信这对我来说是正确的。我有一个自定义项目布局的列表视图,包括两个TextView和一个CheckBox。我有以下代码:
list.setOnItemClickListener(new OnItemClickListener(){
@Override
public void onItemClick(AdapterView<?> adapter, View view, int position,
long rowid) {
CheckBox c = (CheckBox) view.findViewById(R.id.item_chkbox);
c.setChecked(!c.isChecked());
String n = ((TextView) view.findViewById(R.id.item_charName)).getText().toString();
String p = ((TextView) view.findViewById(R.id.item_playerName)).getText().toString();
...
当我点击列表中的某个项目时,会触发一个复选框并进行检查,但它不是正确的。这也不是随机的。触发的CheckBox始终位于相反的一侧,镜像在列表的中心。例如,如果我有一个列表:
0 1 2 3 4
然后点击“0”,4的支票就会开火。如果我点击1,3,检查就会开启。如果我点击2,2的检查点火。更奇怪的是,如果我点击0两次,3次检查,然后0次检查。点击第三次,3次取消选中。一个 - 0 - 取消检查。这种情况在所有情况下继续存在。我无法弄清楚发生了什么。
请注意,字符串n和p都正确显示。换句话说,点击0将检索相应列表项中“name”的字符串。它只是CheckBoxes的重击。有什么想法吗?
答案 0 :(得分:1)
我遇到了你的问题,我的解决方案是删除所有与你的列表视图的多项选择相关的东西,比如android:CHOICE_MODE_MULTIPLE,android:choiceMode,....试试吧!
答案 1 :(得分:1)
归咎于ListView
,因为当您滚动自定义ListView
时,您应该覆盖适配器的getView(...)
。 API文档称该视图已被回收。因此,应保存上一个视图的状态。例如,是否检查CheckBox
。如果您恢复状态,ListView
将按预期显示。
答案 2 :(得分:0)
我没有尝试,但我认为这应该有用:在onItemClick
方法中,不要使用view
对象来查找CheckBox
,请尝试使用ListView.getChildAt(position)
。