Java Android:对setOnClickListener作出反应的复选框列表视图
我正在使用数组适配器从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方法。我在想下面的条件语句,但我被条件卡住了。请帮忙 可能是条件语句,但我被条件卡住了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中传递的
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;
}