CheckedTextView не отвечает на клики - PullRequest
4 голосов
/ 18 октября 2011

У меня есть список, который динамически заполняется CheckedTextViews.Представление списка установлено в режим множественного выбора.Я использую OnItemClickListener для ответа на клики в моем списке.Также я сделал XML-файл с макетом CheckedTextView (на самом деле это просто копия стандартного android.R.layout.simple_list_item_multiple_choice).Так что в этом случае все работает нормально: когда я щелкаю элемент в просмотре списка, проверяется соответствующий проверенный текстовый просмотр.Но когда я пытаюсь использовать следующий макет, проверенный текстовый вид не реагирует на щелчок и все еще не проверен.

<?xml version="1.0" encoding="utf-8"?>  
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@+id/ll"
    android:layout_height="wrap_content"   
    android:layout_width="wrap_content"  
    android:orientation="vertical"  
    android:padding="5px">
    <CheckedTextView xmlns:android="http://schemas.android.com/apk/res/android"
        android:id="@android:id/text1"
        android:layout_width="fill_parent"
        android:layout_height="?android:attr/listPreferredItemHeight"
        android:gravity="center_vertical"
        android:drawableLeft="@drawable/checkbox_selector"
        android:paddingLeft="6dip"
        android:paddingRight="6dip"
        android:background="#00ffffff"
        android:textSize="15sp"
        android:singleLine="true"/>
</LinearLayout>    

Я предполагаю, что это потому, что CheckedTextViews помещены в LinearLayout, и они не получаютсобытие щелчка из элементов списка в представлении списка.

Ответы [ 5 ]

1 голос
/ 28 октября 2011

Наверное, другое. Если вы посмотрите на исходный код simple_list_item_multiple_choice.xml, вы увидите, что атрибут android:checkMark установлен в ?android:attr/listChoiceIndicatorMultiple. Это то, что CheckedTextView внутренне использует для рисования флажка в каком бы состоянии он ни находился, как вы можете увидеть из его исходного кода .

Но определению CheckedTextView в вашем макете не хватает этого атрибута. В этом я бы виню, а не CheckedTextView в элементе LinearLayout.

Я был не прав, и вы угадали. Кажется, что строка для пользовательского ListView должна реализовывать Checkable, что CheckedTextView делает, а LinearLayout - нет. Подробнее см. этот ответ в другой ветке StackOverflow.

1 голос
/ 26 июля 2013

У меня была такая же проблема, поэтому я изменил макет на android.R.layout.simple_list_item_multiple_choice вместо использования пользовательского макета с CheckedTextView.

0 голосов
/ 31 марта 2017

Эта проблема вызвана атрибутом singleLine = true. Если вы удалите это или замените на maxLines = 1, он будет работать нормально. На самом деле, статус проверяется, когда вы нажимаете на элемент & mdash; Я думаю, что это ошибка Android.

0 голосов
/ 04 сентября 2013

Существует два простых решения этой проблемы:

  1. Удалите LinearLayout и только для пользователя CheckedTextView (да, это возможно). Таким образом, основной элемент макета можно проверить, и он будет помечен.

  2. Если ваш minSDK равен 11 и выше, настройте android: checkMarke и установите состояние «Активировано». Вот пример:

Пример кода:

<?xml version="1.0" encoding="utf-8"?>
<selector  xmlns:android="http://schemas.android.com/apk/res/android" >
   <item android:state_activated="true" android:drawable="@drawable/checkbox_selected"/>  
   <item android:state_activated="false" android:drawable="@drawable/checkbox_deselected" />  
   <item android:state_checked="false" android:drawable="@drawable/checkbox_deselected" />  
   <item android:state_checked="true" android:drawable="@drawable/checkbox_selected" /> 
</selector>

Источник: http://www.jiahaoliuliu.com/2013/08/customizing-checkbox-in-android.html

Средним уровнем решения является настройка onItemClickListener представления списка, как показано в этом коде: https://github.com/jiahaoliuliu/CustomizedListRow

Трудное, но правильное решение - это то, что предлагает MarvinLab: http://www.marvinlabs.com/2010/10/29/custom-listview-ability-check-items/

Проблема, связанная с данной: В чем разница между состояниями, выбранными, отмеченными и активированными в Android?

0 голосов
/ 19 октября 2011

Ну, даже если они не получают OnClickEvent, вы можете поддерживать состояние этих флажков, используя логический ArrayList того же размера элементов списка. Здесь, Я только что ответил что-то подобное.Я надеюсь, что это даст вам лучшую идею.

...