Android: как отключить выбранные и нажатые атрибуты родительского представления в listView - PullRequest
1 голос
/ 20 октября 2011

У меня есть listView с пользовательскими строками, содержащими кнопки, и я заполняю listView пользовательским курсором Adapter. Я установил селектор для кнопки, чтобы изменить ее фон при нажатии, и он прекрасно работает, когда я нажимаю на кнопку. Проблема в том, что это также работает, когда я нажимаю в любом месте строки.

Я пытался установить атрибуты родительского представления .setPressed, .setSelected, .setFocusable, .setFocusableInTouchMode, .setClickable в false, но это не сработало.

Я также пытался установить для кнопки .setDuplicateParentStateEnabled значение false, но это также не помогло.

Если вы можете мне помочь, я буду благодарен,

Заранее спасибо

Позвольте мне расширить мой вопрос: у меня сначала есть строки без кнопки (это TextView с идентификатором «delete_button» в коде xml ниже). Когда я нажимаю другую кнопку в представлении, кнопки удаления скользят по строкам, а фон другого TextView (id: list_title_text) изменяется на постоянный цвет (потому что я не хочу, чтобы он больше активировался)

<RelativeLayout
  xmlns:android="http://schemas.android.com/apk/res/android"
  android:id="@+id/title_rows_relativelayout"
  android:orientation="vertical"
  android:layout_width="match_parent"
  android:layout_height="match_parent">
    <TextView
        android:id="@+id/list_title_text"
        android:layout_alignParentLeft="true"
        android:layout_width="wrap_content"
        android:layout_height="50dp"
        android:textSize="25dp"
        android:textColor="@android:color/white"
        android:layout_alignParentRight="true"
        android:background="@drawable/selector_for_list_rows"
        android:paddingLeft="15dp"
        android:paddingBottom="5dp"
        android:paddingRight="15dp"
        android:gravity="center_vertical"
        android:typeface="normal" />
    </TextView>
    <TextView 
    android:id="@+id/delete_button"
    android:background="@drawable/selector_for_delete_button"
    android:layout_width="wrap_content" 
    android:layout_height="40dp"
    android:textSize="23dp"
    android:textColor="@android:color/white"
    android:paddingLeft="10dp"
    android:paddingRight="10dp"
    android:gravity="center"
    android:layout_alignTop="@+id/row_icon_background" 
    android:layout_alignParentRight="true"
    android:layout_marginRight="5dp">
    </TextView>
 </RelativeLayout>

Ответы [ 2 ]

0 голосов
/ 08 января 2016

Выбранные, нажатые и активированные явно устанавливаются для дочерних элементов как ViewGroup.dispatchSetSelected(), .dispatchSetPressed() и .dispatchSetActivated() соответственно, независимо от значения DUPLICATE_PARENT_STATE дочернего элемента.Переопределите эти методы в родительском с помощью no-ops, чтобы отключить эти варианты поведения.

По умолчанию фокус и нажатие распространяются вплоть до дочерних элементов, которые не могут быть сфокусированы или кликабельны, соответственно.В моих случаях было правильнее пометить соответствующих детей, которые можно сфокусировать или щелкнуть, чем setDuplicateParentState(false) (что уже является значением по умолчанию для класса View).

Для меня я обнаружил, что setDuplicateParentStateEnabled()красная сельдь, и без нее смог решить мои проблемы.

0 голосов
/ 06 ноября 2011

Я решил эту проблему, установив для атрибута setFocusable кнопки значение true внутри своего пользовательского ListAdapter (я изменил свой CursorAdapter на ListAdapter после того, как написал вопрос, но я уверен, что он будет работать и с CursorAdapter).Теперь фон кнопки изменяется только тогда, когда я нажимаю на кнопку, и ничего не происходит, когда я нажимаю где-либо еще.

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