Вы должны расширить свой собственный адаптер от ArrayAdapter, чтобы получить то, что вы хотите.
Существует множество хороших руководств по этому вопросу, как здесь:
учебник по настраиваемому списку просмотра
В соответствии с этим, вы можете попробовать что-то вроде этого:
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>
. (Это то, что на самом деле показано в учебнике.)