Android 列表视图中的 onClick 复选框未选中

Android onClick checkbox not checked in listview

我正在使用 CheckBox 开发 Customized ListView。当我们单击 ListView 的项目时,我试图检查单选 CheckBox。我该怎么做?

我的XML code

<TextView
    android:id="@+id/addressTXT"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_centerVertical="true"
    android:layout_marginTop="10dp"
    android:text="Price" />

<CheckBox
    android:id="@+id/addressCheckBox"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_centerVertical="true"
    android:layout_toRightOf="@+id/addressTXT"
    android:layout_marginRight="40dp"
    android:focusable="false"
    android:focusableInTouchMode="false" />

然后单击 BaseAdapter 中的项目。

         itemView.setOnClickListener(new OnClickListener() {

        @Override
        public void onClick(View v) {
            // TODO Auto-generated method stub

        }
    });

我该怎么做?

你可以这样做:

    itemView.setOnClickListener(new OnClickListener() {

    @Override
    public void onClick(View v) {
        CheckBox box = v.findViewById(R.id.addressCheckBox); //get your checkbox
        box.setChecked(!box.isChecked()); //toggle checkbox-state
    }
});

首先,您必须将 onClickListener 用于复选框,而不是整个视图。 其次,在 XML 中,对于适配器,您必须将其用于 checkBox

android:focusable="true"
android:clickable="true"

如果您需要单独的 clickListeners 用于复选框和 listView 行,您需要 XML 中的此参数用于 checkBox

android:focusable="false"
android:clickable="true"

啊啊我遇到了同样的问题:) 我解决了这个问题,如下所示。

    itemView.setOnClickListener(new OnClickListener() {

        @Override
        public void onClick(View v) {
            // TODO Auto-generated method stub
            for (int i = 0; i < parent.getChildCount(); i++) {

                View view = parent.getChildAt(i);
                CheckBox checkBox = (CheckBox) view
                        .findViewById(R.id.CheckBox);
                checkBox.setChecked(false);

            }

            CheckBox checkBox = (CheckBox) v
                    .findViewById(R.id.CheckBox);
            checkBox.setChecked(true);

        }
    });