ListView с CHOICE_MODE_MULTIPLE с использованием CheckedText в пользовательском представлении

Есть много вопросов о том, как использовать CheckedTextView, но я не могу заставить его работать правильно.

У меня есть CursorAdapter с пользовательским представлением, которое имеет CheckedTextView с android:id="@android:id/text1". Я использовал android:id/text1, потому что есть разные вопросы, которые говорят о том, что если вы его используете, вы получите свободный выбор режима выбора.

Если я сделаю что-то вроде этого:

final long[] checkedIds = mListView.getCheckedItemIds();
for ( int i = 0 ; i < mListView.getCheckedItemCount() ; i++ ) {
    Log.d(TAG, "id checked: " + checkedIds[i]);
}

Я получаю все проверенные идентификаторы без проблем, но я не вижу визуальной обратной связи в ListView.

Другими словами, логика в порядке, но когда я нажимаю кнопку CheckedTextView Зеленый галочка не отображается.

Я читал код ListView src, и я не мог найти ссылку на android:id/text1 и заставляет задуматься, должен ли я сам обрабатывать состояние виджета.

Может ли кто-нибудь определить, где android:id/text1 используется для проверки виджета или нет?

Ответы

Ответ 1

Основываясь на моем чтении кода, строка должна реализовать Checkable:

if (mChoiceMode != CHOICE_MODE_NONE && mCheckStates != null) {
    if (child instanceof Checkable) {
        ((Checkable) child).setChecked(mCheckStates.get(position));
    }
}

Это работает для макетов строк для списков с режимом выбора, потому что строка является CheckedTextView, которая реализует Checkable.

Итак, добавьте интерфейс Checkable к вашему пользовательскому View, делегируя методы интерфейса CheckedTextView и посмотрите, не работает ли это.