【问题标题】:CheckBox and setOnItemClickListener not working in androidCheckBox 和 setOnItemClickListener 在 android 中不起作用
【发布时间】:2012-07-31 09:44:18
【问题描述】:

我正在使用 ListViewCheckBox。我只选择了一个CheckBox,但它使用ScrollView 自动选择到多行中。

示例代码(此代码运行良好)

       holder.checkbox.setOnClickListener( new OnClickListener()
        {
            public void onClick( View v )
            {
                CheckBox cb = ( CheckBox ) v;
                if ( cb.isChecked() )
                {
                    test[position] = true;
                    holder.checkbox.setChecked(test[position]);
                }
                else
                {
                    test[position] = false;
                    holder.checkbox.setChecked(test[position]);
                }
            }
        });
        holder.checkbox.setChecked(test[position]);

但是当我使用setOnItemClickListener 时它不起作用。

示例代码(此代码不适用于我)

        listview.setOnItemClickListener( new OnItemClickListener() 
        {
            public void onItemClick( AdapterView<?> parent, final View v, final int position, long id ) 
            {
                holder.checkbox = ( CheckBox ) v.findViewById( R.id.lock_File_CheckBox );
                if ( holder.checkbox.isChecked() )
                {
                    test[position] = false;
                    holder.checkbox.setChecked(test[position]);
                }
                else
                {
                    test[position] = true;
                    holder.checkbox.setChecked(test[position]);
                }
            }
        });
        holder.checkbox.setChecked(test[position]);

我可能会弄错的地方。如何避免这种CheckBox 选择。

你能帮帮我吗?

【问题讨论】:

  • 有什么问题??是否要选中超过 1 个复选框?
  • 我选择了 One Row 但它指出了多个 Row。
  • 对不起,我没有得到你。!
  • 参考此链接stackoverflow.com/questions/6846151/problem-with-checkbox 我有同样的问题。当我使用listview.setOnItemClickListener 时,它无法正常工作。那就是现在我可以在最后两行(复选框被选中)中同时进行第一行和第二行(复选框被选中)。如何解决这个问题。
  • 当我使用listview.setOnItemClickListener 选择复选框时,问题是当我选择一个复选框时,如果我滚动列表,则会选中其他复选框(它们之间的距离为 10)我不明白为什么。谁能帮帮我?

标签: android listview checkbox onitemclicklistener


【解决方案1】:

要使您的列表视图具有焦点,请从项目本身移除焦点。 实例化listview后添加以下内容:

listview.setItemsCanFocus(false);

然后将以下内容添加到您的 list_item.xml

<CheckBox
    android:id="@+id/lock_File_CheckBox"
    android:focusable="false"
    android:focusableInTouchMode="false"/>

这样,您的setOnItemClickListener() 将被调用

【讨论】:

    【解决方案2】:

    您可以使用setTag()getTag()onItemClick() 中获取CheckBox 的实例。您可以将 getView() 方法中的 CheckBox 实例设置为

    convertView.setTag(R.id.check, viewHolder.checkbox);
    

    并使用onItemClick() 获取实例,

    CheckBox checkbox = (CheckBox) v.getTag(R.id.check);
    

    如果您还有任何疑问,可以查看my blog post

    【讨论】:

    • 当我使用 listview.setOnItemClickListener 选择 CheckBox 时,问题是当我选择一个复选框时,如果我滚动列表,则会选择其他复选框(它们之间的距离为 10)我不明白为什么。
    • 它的发生是因为回收机制。
    • 可扩展列表中随机选中/取消选中的复选框,如何避免回收机制。你能帮帮我吗?
    • 好吧,我已经给了你我的示例链接,你可以下载并通过保存 ListItem(CheckBox) 的位置来检查我使用setTag()getTag() 管理的方式。
    • 好的。谢谢你给的信息。现在我可以锻炼了,在我告知结果之后。谢谢。
    【解决方案3】:

    不要使用 onClick。使用 OnCheckedChange

    holder.checkbox.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() {
            @Override
            public void onCheckedChanged(CompoundButton compoundButton, boolean isChecked) {
                if (isChecked) {
                    doSomethingWithCheckedState(compoundButton);
                } else {
                    doSomethingWithUnCheckedState(compoundButton);
                }
            }
        });
    

    请记住,CheckBox 继承自 CompoundButton 以实现 ICS 的开关兼容性。

    【讨论】:

    • 大坝 holder.checkbox.setOnClickListener 它正在工作。但是listview.setOnItemClickListener 不行。
    • 对。所以问题不是来自您的示例代码,而是来自您的适配器。如果有多个CheckBox被选中,一定是引用问题。
    • 当我选择第一行复选框时,可以选中第一行和第十二行。当我选择第二行复选框时,可以选中第二行和十三行。为什么会这样。
    【解决方案4】:

    列表项中的焦点视图可防止在单击列表项时触发ListActivity 中的onListItemClick()。但是onListItemClick()的效果可以用OnClickListener来实现。阅读here 了解更多信息

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-10-12
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多