Checkable - это кривая обучения, которую я предпочитаю не брать прямо сейчас.Вы можете установить и снять флажок CheckBox вручную в разделе «Действия» OnItemClickListener
.Сохраните логическую переменную isChecked
в списке MyObject
в ArrayAdapter<MyObject>
.
public void onItemClick(AdapterView<?> av, View v, int position, long arg3) {
final ListView listView = (ListView) findViewById(android.R.id.list);
MyObject item = (MyObject) listView.getItemAtPosition(position);
item.isChecked = !item.isChecked;
if(item.isChecked)
addItem(item);
else
removeItem(item);
}
Для аккаунта пользователей, нажимающих на CheckBox
;используйте ту же логику addItem (item) / removeItem (item) в реализации getView
вашего адаптера массива, в CheckBox
OnClickListener
.
public View getView(int position, View convertView, ViewGroup viewGroup) {
CheckBox cb = null;
if (convertView == null) {
if(inflater == null) //cache to avoid reconstructing for each view
inflater = (LayoutInflater) getContext().getSystemService(Context.LAYOUT_INFLATER_SERVICE);
convertView =inflater.inflate(R.layout.list_item_text_right_checkmark, null);
CheckBox cb = (CheckBox) convertView.findViewById(R.id.check);
cb.setChecked((list.get(position).isChecked));
cb.setTag(list.get(position);
public void onClick(View v) {
if(v instanceof CheckBox) {
CheckBox cb = (CheckBox) v;
if(cb.isChecked()) //verify boolean logic here!!!
activityRef.get().addItem(cb.getTag()); //WeakReference to activity
else
activityRef.get().removeItem(cb.getTag());
}
});
} else cb = (CheckBox) convertView.findViewById(R.id.check);
cb.setChecked((list.get(position).isChecked));
...
}
Ключом здесь является вызов CheckBox :: setChecked ().
Похоже, это поможет, если ваш адаптер массива может выполнять те же действия, а адаптер массива может принимать то же самое.определение элемента списка XML в res / layout /.
проверяемый элемент списка XML:
<?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="match_parent"
android:orientation="vertical" >
<TextView
android:id="@+id/text"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_toLeftOf="@+id/check"
android:gravity="center_vertical"
android:paddingLeft="8dp"
android:textAppearance="?android:attr/textAppearanceMedium" />
<CheckBox
android:id="@+id/check"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentRight="true"
android:focusable="false"/>
</RelativeLayout>
Если вам нужно сначала проверить некоторые из своих CheckBox, просто установите элементы isChecked в MyObject перед надуванием.