#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 в базовом адаптере?