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
и посмотрите, не работает ли это.