Versuchen, einen Klick auf android ListView Item zu fangen: android: descendantFocusability = "blocksDescendants" funktioniert nicht

Dies wurde in vielen Beiträgen auf StackOverflow angesprochen. Die am meisten empfohlene Lösung ist:

android:descendantFocusability="blocksDescendants" 

Auf dem Wurzellayout des Listeneintrags. Ich habe folgendes gemacht

  • Gps-Status aktiviert / deaktiviert Rundfunkempfänger
  • Android marshmallow dynamische Berechtigungsänderung tötet alle Anwendungsprozesse
  • ExceptionWithContext wird geworfen, wenn versucht wird, eine Android App mit Ant zu erstellen
  • Finde einen externen SD-Kartenplatz
  • WebView zeigt Quellhtml mit loadDataWithBaseURL, nicht gerenderte Ansicht
  • Die Verbindung zu adb ist unten, und ein schwerer Fehler ist aufgetreten
    • Set android:descendantFocusability="blocksDescendants" auf dem Root-Listenelement-Layout.
    • Aufgerufenen setDescendantFocusability(BLOCK) auf der listView, sowie jedes listViewItem.
    • Set focus=disabled auf den ImageButtons

    Wenn jedoch eine der untergeordneten ImageButtons angeklickt wird, kann ich keine Listener auf die ListView oder ListView Items ListView .

    Unten ist die "Vorlage", die ich verwende, um ein Listenelement zu machen.

     <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:id="@+id/reminderItem" android:layout_width="match_parent" android:layout_height="wrap_content" android:orientation="vertical" android:descendantFocusability="blocksDescendants" android:padding="0dp"> <RelativeLayout android:id="@+id/topPartOfReminder" android:layout_width="match_parent" android:layout_height="wrap_content" android:padding="10dp"> <LinearLayout android:layout_alignParentLeft="true" android:layout_alignParentTop="true" android:orientation="vertical" android:layout_width="wrap_content" android:layout_height="match_parent" android:id="@+id/textLayout"> <LinearLayout android:layout_width="wrap_content" android:layout_height="wrap_content" android:orientation="horizontal"> <TextView android:fontFamily="sans-serif-light" android:layout_width="wrap_content" android:layout_height="wrap_content" android:textSize="22sp" android:text="10:00" android:textStyle="normal" android:id="@+id/textTime"/> <TextView android:fontFamily="sans-serif-condensed" android:textSize="9sp" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="AM" android:paddingLeft="2dp" android:textStyle="normal" android:id="@+id/textAmPm"/> <TextView android:layout_width="wrap_content" android:layout_height="wrap_content" android:textAppearance="?android:attr/textAppearanceMedium" android:text=" - " android:id="@+id/textDivider"/> <TextView android:fontFamily="sans-serif-light" android:layout_width="wrap_content" android:layout_height="wrap_content" android:textSize="16sp" android:text="March 26" android:id="@+id/textDate"/> </LinearLayout> <TextView android:fontFamily="sans-serif-light" android:layout_width="wrap_content" android:layout_height="wrap_content" android:textSize="12sp" android:text="Blah blah blah blah" android:id="@+id/textDescription"/> </LinearLayout> <LinearLayout android:layout_width="wrap_content" android:layout_height="match_parent" android:layout_toRightOf="@+id/textLayout" android:gravity="right"> <ImageButton style="@style/HorizontalButton" android:id="@+id/shiftButton" android:layout_width="30dp" android:layout_height="30dp" android:background="@drawable/ic_action_forward" android:layout_marginLeft="10dp"/> <ImageButton style="@style/HorizontalButton" android:id="@+id/repeatButton" android:layout_width="30dp" android:layout_height="30dp" android:background="@drawable/ic_action_refresh" android:layout_marginLeft="10dp"/> <ImageButton style="@style/HorizontalButton" android:id="@+id/tickButton" android:layout_width="30dp" android:layout_height="30dp" android:background="@drawable/ic_action_done" android:layout_marginLeft="10dp"/> </LinearLayout> </RelativeLayout> <LinearLayout android:id="@+id/tickButtonsView" android:layout_width="match_parent" android:layout_height="50dp" android:padding="0dp" android:orientation="horizontal" android:visibility="gone"> <Button style="@style/HorizontalButton" android:text="OK"/> <View style="@style/VerticalDivider"/> <Button style="@style/HorizontalButton" android:text="Cancel"/> </LinearLayout> <LinearLayout android:id="@+id/repeatButtonsView" android:layout_width="match_parent" android:layout_height="50dp" android:padding="0dp" android:orientation="horizontal" android:visibility="gone"> <Button style="@style/HorizontalButton" android:text="day"/> <View style="@style/VerticalDivider"/> <Button style="@style/HorizontalButton" android:text="weekday"/> <View style="@style/VerticalDivider"/> <Button style="@style/HorizontalButton" android:text="week"/> <View style="@style/VerticalDivider"/> <Button style="@style/HorizontalButton" android:text="month"/> </LinearLayout> <LinearLayout android:id="@+id/shiftButtonsView" android:layout_width="match_parent" android:layout_height="50dp" android:padding="0dp" android:orientation="horizontal" android:visibility="gone"> <Button style="@style/HorizontalButton" android:text="1 week"/> <View style="@style/VerticalDivider"/> <Button style="@style/HorizontalButton" android:text="1 day"/> <View style="@style/VerticalDivider"/> <Button style="@style/HorizontalButton" android:text="1 hour"/> <View style="@style/VerticalDivider"/> <Button style="@style/HorizontalButton" android:text="10 mins"/> </LinearLayout> </LinearLayout> 

    Ich stelle auch diese NachkommeFocusability in den Code, nur um sicher zu sein:

     public class ReminderItemAdapter extends CursorAdapter { . . . @Override public View newView(Context context, Cursor cursor, ViewGroup parent) { View v = mLayoutInflater.inflate(R.layout.reminder_item, parent, false); parent.setDescendantFocusability(ViewGroup.FOCUS_BLOCK_DESCENDANTS); ((ViewGroup) v).setDescendantFocusability(ViewGroup.FOCUS_BLOCK_DESCENDANTS); return v; } 

    Und auf das Styling meiner ImageButton habe ich fokussierbar = falsch gesetzt, nur für ein gutes Maß:

     <resources> <style name="HorizontalButton"> <item name="android:layout_width">0dip</item> <item name="android:layout_weight">1</item> <item name="android:layout_height">match_parent</item> <item name="android:fontFamily">sans-serif</item> <item name="android:textSize">12sp</item> <item name="android:background">?android:attr/selectableItemBackground</item> <item name="android:focusable">false</item> <item name="android:focusableInTouchMode">false</item> </style> . . . 

    Ich bekomme onClick's erhalten, wenn du auf einen beliebigen Teil des Listenelements klickst, einschließlich der untergeordneten TextView-Elemente. Allerdings, wenn Sie auf eine der ImageButtons klicken, werden die Klicks nicht abgeholt. (BTW habe ich OnClickListeners mit den ImageButtons registriert und sie werden angerufen.)

    Festgelegt haben:

    • SetOnItemClickListener auf ListView
    • SetOnItemSelectedListener auf ListView
    • SetOnClickListener auf jedem ListView Item.

    Aber keiner von diesen wird angerufen, wenn eine der ImageButtons angeklickt wird.

    Jede Hilfe wäre willkommen.

  • Retrofit2 Android: Erwartete BEGIN_ARRAY aber war BEGIN_OBJECT an Zeile 1 Spalte 2 Pfad $
  • Erstellen Sie Android-Bibliothek AAR einschließlich Javadoc und Quellen
  • Wie beschleunige ich Android Studio auf einem Mac
  • Gibt es einen soliden Weg, um mit Windows integrierte (NTLM) Authentifizierung von einer Android-App umzugehen?
  • Hinzufügen von Tab in Fragment In Android?
  • Wie kann ich die Farbe des androiden Ratingstabs einstellen? (Nicht die Farbe der Sterne, sondern die BORDER)
  • 3 Solutions collect form web for “Versuchen, einen Klick auf android ListView Item zu fangen: android: descendantFocusability = "blocksDescendants" funktioniert nicht”

    Versuchen Sie, diese in jedem Button Layouts verwenden

      android:focusable="false" android:focusableInTouchMode="false" 

    Und andere Dinge entfernen, die du dafür machst. Auch aus Listenansicht. Auch entfernen

     android:descendantFocusability="blocksDescendants" 

    und das auch

     parent.setDescendantFocusability(ViewGroup.FOCUS_BLOCK_DESCENDANTS); ((ViewGroup) v).setDescendantFocusability(ViewGroup.FOCUS_BLOCK_DESCENDANTS); 

    android:focusable="false" einfach android:focusable="false" in der Zeile / item.xml der listView.

    Es löst alle deine Probleme. Wenn du einen event listener on the listView . Es lässt dich nicht auf die ganze ListView Row klicken. ich meine

    listView.setOnClickListener(this); Wird nicht angerufen. Weil der Fokus auf die row/item of the listView . Durch Hinzufügen von android:focusable="false" zum Button oder ImageView, auf dem du ein Event platzierst. Es wird ihren Fokus verlieren und der Fokus ist der Gewinn durch listView. Jetzt können Sie listView clickable as well as its descendents rows/item..

    Kurz gesagt, setzen Sie einfach android:focusable="false in TextView/Button or ImageView , die Event-Listener im Item / row.xml haben.

    Hast du versucht, Android hinzuzufügen: clickable = "false" für die Schaltflächen? Ich lief nur in eine ähnliche Frage und das behielt es für mich, während mit Android: fokussierbar = "falsch" nicht.

    Viel Glück!

    Das Android ist ein Google Android Fan-Website, Alles ├╝ber Android Phones, Android Wear, Android Dev und Android Spiele Apps und so weiter.