ListView с CHOICE_MODE_MULTIPLE с использованием CheckedText в пользовательском представлении - PullRequest
19 голосов
/ 10 апреля 2011

Есть много вопросов о том, как использовать 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 Ответ

33 голосов
/ 10 апреля 2011

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

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

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

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...