在我的程序中,我有一个简单的ListView
并在其上设置ArrayAdapter
:
arrayAdapter = new ArrayAdapter<String>(getApplicationContext(),
R.layout.row_layout_checkbox, R.id.textView_checkbox, list);
listView.setAdapter(arrayAdapter);
&#34;列表&#34;是一个String-Array(String [])。
布局XML row_layout_checkbox :
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="60dp"
android:orientation="vertical">
<CheckBox
android:id="@+id/checkBox"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_centerVertical="true"
android:layout_alignParentRight="true"
android:layout_alignParentEnd="true"
android:layout_marginRight="14dp"
android:layout_marginEnd="14dp"/>
<TextView
android:id="@+id/textView_checkbox"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentLeft="true"
android:layout_alignParentStart="true"
android:layout_centerVertical="true"
android:layout_marginLeft="17dp"
android:layout_marginStart="17dp"
android:text="TextView"
android:textColor="@color/colorBlack"/>
</RelativeLayout>
所以我的问题:如何检查选中的复选框,以便在布尔数组中输入true或false?
(它应该可以检查每个项目的复选框,应该是多选而不是单一选择。)
答案 0 :(得分:0)
您应该从ArrayAdapter扩展自己的自定义适配器,以获得您想要的。
有很多关于这样做的好教程,比如这里:
custom listview adapter tutorial
根据这个,你可以尝试这样的事情:
public class MyAdapter extends ArrayAdapter<String> {
private Context mContext;
private ArrayList<String> list = new ArrayList<>();
private boolean[] booleanArray;
public MovieAdapter(@NonNull Context context, @LayoutRes ArrayList<String> list, boolean[] booleanArray) {
super(context, 0 , list);
mContext = context;
this.list = list;
this.booleanArray = booleanArray;
}
@NonNull
@Override
public View getView(final int position, @Nullable View convertView, @NonNull ViewGroup parent) {
if(convertView == null) {
convertView = LayoutInflater.from(mContext).inflate(R.layout.row_layout_checkbox,parent,false);
}
String item = list.get(position);
CheckBox checkBox = convertView.findViewById(R.id.checkBox);
TextView textView = convertView.findViewById(R.id.textView_checkBox);
checkBox.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() {
@Override
public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
booleanArray[position] = isChecked;
}
});
return convertView;
}
}
这应该基本上有效。但我想,更好的方法是创建自己的数据模型类,其中包含TextView的字符串和复选框的选中状态。然后,您从ArrayAdapter<YourDataModel>
而不是ArrayAdapter<String>
扩展自定义适配器。 (这是教程中实际显示的内容。)