首页 > 解决方案 > 无法在自定义 ListView 中将 onItemClickListener 设置为 CheckBox

问题描述

我有一个 cutsom ListView 和自定义 ArrayAdapter。我的 ListView 包含 TextView 和 CheckBox。我想在 CheckBox 上实现 onClick() 方法。

custom_ListView.xml

<TextView
    android:id="@+id/text_inList"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_marginTop="20dp"
    android:layout_marginStart="20dp" />

<com.google.android.material.checkbox.MaterialCheckBox
    android:id="@+id/checkbox_inList"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_alignParentRight="true"
    android:focusable="false"/>

CustomAdapter.java

public class CustomAdapter extends ArrayAdapter<Task> {
private List<Task> tasks;
private Activity context;

private DataBase dataBase;
private Task task;


// Constructor
public CustomAdapter(Activity context, List<Task> tasks){
    super(context,R.layout.list_with_checkbox,tasks);
    this.context=context;
    this.tasks=tasks;
}



@Override
public View getView(final int postion, View view, ViewGroup parent){
    view = context.getLayoutInflater().inflate(R.layout.list_with_checkbox, null, true);

    CheckBox checkBox=(CheckBox)view.findViewById(R.id.checkbox_inList);

    checkBox.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View view) {
            //position should be equal to the position of CheckBox that is clicked 
            Toast.makeText(context,String.valueOf(postion),Toast.LENGTH_SHORT).show();
        }
    });


    return view;
}

问题是当我运行这个应用程序时,我发现当我单击 ListView 的任何 CheckBoxes 时,Toast 消息只显示列表的最后一个位置。换句话说,我无法获得在 ListView 中单击的 CheckBox 的位置。我也尝试在 MainActivity 中实现 onItemClickListener() ,但它没有对 CheckBox 单击做出反应,而是对 TextView 单击做出反应。

标签: android

解决方案


推荐阅读