【问题标题】:CheckBox with SimpleCursorAdapter in ListActivity (ListView)ListActivity (ListView) 中带有 SimpleCursorAdapter 的 CheckBox
【发布时间】:2011-08-20 17:47:47
【问题描述】:

大家好,我知道有很多实现自定义适配器的教程,但我不相信这适合我。我有一个由两个 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 将在相应的列表项中检索“名称”的字符串。只有 CheckBoxes 不正常。有什么想法吗?

【问题讨论】:

  • 嗯...... onItemClick 方法的其余部分是什么?您的适配器存储什么?
  • 嗯,你知道我搜索了几天,显然没有做得很好,我遇到了一个非常相似的问题:stackoverflow.com/questions/4834142/…,我现在正在尝试关注他们的解决方案。我不知道他们对“EventDbAdapter”类的使用是从哪里来的。

标签: java android listview checkbox listactivity


【解决方案1】:

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

【讨论】:

    【解决方案2】:

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

    【讨论】:

      【解决方案3】:

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2012-08-03
        • 1970-01-01
        • 2023-03-03
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2011-09-23
        相关资源
        最近更新 更多