CheckBox与ListActivity中的SimpleCursorAdapter(ListView)

时间:2011-05-07 12:54:40

标签: java android listview checkbox listactivity

嘿所有,我知道有很多实现自定义适配器的教程,但我不相信这对我来说是正确的。我有一个自定义项目布局的列表视图,包括两个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的重击。有什么想法吗?

3 个答案:

答案 0 :(得分:1)

我遇到了你的问题,我的解决方案是删除所有与你的列表视图的多项选择相关的东西,比如android:CHOICE_MODE_MULTIPLE,android:choiceMode,....试试吧!

答案 1 :(得分:1)

归咎于ListView,因为当您滚动自定义ListView时,您应该覆盖适配器的getView(...) 。 API文档称该视图已被回收。因此,应保存上一个视图的状态。例如,是否检查CheckBox。如果您恢复状态,ListView将按预期显示。

答案 2 :(得分:0)

我没有尝试,但我认为这应该有用:在onItemClick方法中,不要使用view对象来查找CheckBox,请尝试使用ListView.getChildAt(position)