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

#android

#Android

Вопрос:

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

У меня есть CursorAdapter с пользовательским представлением, в котором есть CheckedTextView with 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 amp;amp; mCheckStates != null) {
    if (child instanceof Checkable) {
        ((Checkable) child).setChecked(mCheckStates.get(position));
    }
}
  

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

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

Комментарии:

1. Прохладный. Это то, что я сделал. Я создал пользовательское представление, которое расширяет LinearLayout и реализует Checkable . Использование android:id/text1 необязательно, вам просто нужно, чтобы ваш родительский вид был проверяемым. Теперь я получаю дублированные зеленые галочки, но это другая проблема. Спасибо, Марк!

2. что, если у меня есть radiobutton в базовом адаптере?