Java Android:对setOnClickListener作出反应的复选框列表视图

Java Android:对setOnClickListener作出反应的复选框列表视图,java,android,arraylist,checkbox,Java,Android,Arraylist,Checkbox,我正在使用数组适配器从ArrayList填充listview。根据下面的xml文件,listview包含一个复选框和两个文本视图。我还使用了一个自定义的checkbox类,它保存来自ArrayList的信息。我的自定义复选框(ListCheckBox.java)类(如下)有一个名为get_is_complete和set_is_complete的方法。set_is_complete方法当前正在从my ArrayList中获取boloean值,因此会生成一个复选框列表,根据ArrayList中传递的

我正在使用数组适配器从ArrayList填充listview。根据下面的xml文件,listview包含一个复选框和两个文本视图。我还使用了一个自定义的checkbox类,它保存来自ArrayList的信息。我的自定义复选框(ListCheckBox.java)类(如下)有一个名为get_is_complete和set_is_complete的方法。set_is_complete方法当前正在从my ArrayList中获取boloean值,因此会生成一个复选框列表,根据ArrayList中传递的Planet object的值,在该列表中复选框是选中还是未选中。 一切正常,但是当用户单击复选框时,我需要更改set_is_complete的布尔状态。我在adapter类中创建了下面的setOnClickListener,它运行良好

问题是,最初需要根据数组中的初始值来计算set_is_complete方法,但是当用户单击复选框时,应该能够更改set_is_complete方法。我在想下面的条件语句,但我被条件卡住了。请帮忙

可能是条件语句,但我被条件卡住了

    if (condiition){
        holder.chkBox.set_is_complete(p.isSelected());
     }else{
        holder.chkBox.set_is_complete(boolean_value);
     }
单个\u列表\u视图\u item.xml

 <?xml version="1.0" encoding="utf-8"?>
<RelativeLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:focusable="false">

    <com.example.chad.checkbox.ListCheckBox
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:id="@+id/chk_box"
        android:layout_alignParentLeft="true"
        android:textSize="40dp"
        />

    <TextView
        android:text="Mercury"
        android:id="@+id/name"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_toRightOf="@id/chk_box"
        android:textSize="20sp"
        android:textStyle="bold" />

    <TextView
        android:text="570000000"
        android:id="@+id/dist"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_below="@id/name"
        android:layout_toRightOf="@id/chk_box"
        android:textSize="16sp"
        android:textStyle="italic" />


</RelativeLayout>

我能弄明白。如果我在适配器类If中通过下面的If语句直接更新模型,If工作

 final TaskHolder finalHolder = holder;
        final String name;
        name = t.getMy_task_name();

        holder.chkBox.setOnClickListener(new View.OnClickListener() {

            @Override
            public void onClick(View v) {

                if (finalHolder.chkBox.isChecked()) {
                    //boolean_value = true;
                    t.setMy_task_is_complete(true);

                    Toast.makeText(v.getContext(), name + "Is Checked -- " + t.getMy_task_is_complete().toString(), Toast.LENGTH_LONG).show();
                } else {
                    //boolean_value = false;
                    t.setMy_task_is_complete(false);
                    Toast.makeText(v.getContext(), name + "Is Unchecked -- " + t.getMy_task_is_complete().toString(), Toast.LENGTH_LONG).show();
                }

            }

        });
下面是我的模型的代码

public class Task {

Integer my_task_id;
String my_task_name;
Boolean my_task_is_complete;
Integer my_barcode;

public Task(){

}

public Task(Integer my_task_id, String my_task_name, Boolean my_task_is_complete, Integer my_barcode){
    super();
    this.my_task_id = my_task_id;
    this.my_task_name = my_task_name;
    this.my_task_is_complete = my_task_is_complete;
    this.my_barcode = my_barcode;
}

public Integer getMy_task_id() {
    return my_task_id;
}

public void setMy_task_id(Integer my_task_id) {
    this.my_task_id = my_task_id;
}

public String getMy_task_name() {
    return my_task_name;
}

public void setMy_task_name(String my_task_name) {
    this.my_task_name = my_task_name;
}

public Boolean getMy_task_is_complete() {
    return my_task_is_complete;
}

public void setMy_task_is_complete(Boolean my_task_is_complete) {
    this.my_task_is_complete = my_task_is_complete;
}

public Integer getMy_barcode() {
    return my_barcode;
}

public void setMy_barcode(Integer my_barcode) {
    this.my_barcode = my_barcode;
}

}

您可以直接更新模型,对吗?
import android.annotation.TargetApi;
import android.content.Context;
import android.util.AttributeSet;
import android.widget.CheckBox;

public class ListCheckBox extends CheckBox {

    private String planet;
    private Boolean is_complete;
    private Integer distance;

    public ListCheckBox(Context context) {
        super(context);
        //setButtonDrawable(new StateListDrawable());
    }
    public ListCheckBox(Context context, AttributeSet attrs) {
        super(context, attrs);
        //setButtonDrawable(new StateListDrawable());
    }

    public ListCheckBox(Context context, AttributeSet attrs, int defStyleAttr) {
        super(context,attrs,defStyleAttr);
        //setButtonDrawable(new StateListDrawable());
    }

    @TargetApi(21)
    public ListCheckBox(Context context, AttributeSet attrs, int defStyleAttr, int defStyleRes)
    {super(context,attrs,defStyleAttr,defStyleRes);}


    public String getPlanet(){
        return planet;
    }
    public void setPlanet(String planet){
        this.planet = planet;
    }

    public Boolean get_is_complete(){return  is_complete;}
    public void set_is_complete(Boolean is_complete){
        this.is_complete = is_complete;
    }


    public Integer getDistance(){
        return distance;
    }
    public void setDistance(Integer distance){
        this.distance = distance;
    }
}
 final TaskHolder finalHolder = holder;
        final String name;
        name = t.getMy_task_name();

        holder.chkBox.setOnClickListener(new View.OnClickListener() {

            @Override
            public void onClick(View v) {

                if (finalHolder.chkBox.isChecked()) {
                    //boolean_value = true;
                    t.setMy_task_is_complete(true);

                    Toast.makeText(v.getContext(), name + "Is Checked -- " + t.getMy_task_is_complete().toString(), Toast.LENGTH_LONG).show();
                } else {
                    //boolean_value = false;
                    t.setMy_task_is_complete(false);
                    Toast.makeText(v.getContext(), name + "Is Unchecked -- " + t.getMy_task_is_complete().toString(), Toast.LENGTH_LONG).show();
                }

            }

        });
public class Task {

Integer my_task_id;
String my_task_name;
Boolean my_task_is_complete;
Integer my_barcode;

public Task(){

}

public Task(Integer my_task_id, String my_task_name, Boolean my_task_is_complete, Integer my_barcode){
    super();
    this.my_task_id = my_task_id;
    this.my_task_name = my_task_name;
    this.my_task_is_complete = my_task_is_complete;
    this.my_barcode = my_barcode;
}

public Integer getMy_task_id() {
    return my_task_id;
}

public void setMy_task_id(Integer my_task_id) {
    this.my_task_id = my_task_id;
}

public String getMy_task_name() {
    return my_task_name;
}

public void setMy_task_name(String my_task_name) {
    this.my_task_name = my_task_name;
}

public Boolean getMy_task_is_complete() {
    return my_task_is_complete;
}

public void setMy_task_is_complete(Boolean my_task_is_complete) {
    this.my_task_is_complete = my_task_is_complete;
}

public Integer getMy_barcode() {
    return my_barcode;
}

public void setMy_barcode(Integer my_barcode) {
    this.my_barcode = my_barcode;
}