Дочерние элементы GridView не отображают фокус

#android #gridview #focus

#Android #gridview #фокус

Вопрос:

В приложении для Android у меня есть GridView, содержащий TextView, созданный адаптером. В этих TextView я добавляю значок, который имеет три состояния (нажато, выбрано и по умолчанию.) Я удалил селектор GridView по умолчанию с помощью android:listSelector="#00000000" , и я хотел бы, чтобы вместо него отображалось выбранное состояние значка. Но, хотя нажатое состояние работает (т. Е. При нажатии TextView отображается нажатая версия значков), выбранное не работает.

Я пробовал эти приемы (найденные в разных местах в Интернете), но это тоже не сработало:

  • настройка

     android:descendantFocusability="afterDescendants"
      
  • или

     android:drawSelectorOnTop="true"
      
  • или (в текстовых представлениях)

     android:duplicateParentState="true" />
      

И если я настрою TextView на возможность фокусировки, он получит фокус независимо от GridView (т. Е. нажатие на него не вызывает метод onClick GridView onClick …)

Значок определен в XML-файле, подобном этому:

 <selector xmlns:android="http://schemas.android.com/apk/res/android">
  <item android:state_focused="true"
    android:state_pressed="true"
    android:drawable="@drawable/ic_flag_bg_pressed"/>
  <item android:state_focused="false"
    android:state_pressed="true"
    android:drawable="@drawable/ic_flag_bg_pressed"/>
  <item android:state_focused="true"
    android:drawable="@drawable/ic_flag_bg_selected"/>
  <item android:state_focused="false"
    android:state_pressed="false"
    android:drawable="@drawable/ic_flag_bg_default"/>
</selector>
  

Есть ли способ сообщить GridView передать сфокусированное состояние своим дочерним элементам?

Ответ №1:

Также застрял на этом. Альтернативный подход, который может выглядеть нормально, — использовать селектор стиля границы и нарисовать его сверху.