带有复选框的ListView:如何检查是否已选中?

时间:2018-04-29 16:05:52

标签: android listview checkbox android-arrayadapter

在我的程序中,我有一个简单的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?

(它应该可以检查每个项目的复选框,应该是多选而不是单一选择。)

1 个答案:

答案 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>扩展自定义适配器。 (这是教程中实际显示的内容。)