ExpandableListView.onChildClickListener

Z

Zoopa

Stammgast
178
Hallo zusammen

Ich entwickle momentan eine App und verwende dabei eine ExpandableListView. Num möchte ich auf Button-Clicks in den Child-Elementen der ExpandableListView reagieren. Dafür gibts den onChildClickListener, der mir eigentlich alle benötigten Parameter liefert.

Kurz zum Aufbau der App, damit der Ablauf etwas klarer wird:

  • Es gibt nur eine Activity mit einer ExpandableListView
  • Die ListView zeigt standardmässig nur die Groups an, also die erste Schicht der Liste
  • klickt man auf eine Group, klappt die Child-View aus
  • Innerhalb der Child-View gibts mehrere ImageButtons -> Auf diese bezieht sich mein Problem

Das Problem an der Sache ist, dass der Listener nie aufgerufen wird. Ich habe den Listener natürlich der ListView hinzugefügt:

Code:
expListView.setOnChildClickListener(new ExpandableListView.OnChildClickListener() {
    @Override
    public boolean onChildClick(ExpandableListView parent, View v, int groupPosition, int childPosition, long id) {
        Log.d("ExpandableListView", "Child clicked. Position: " + childPosition);
        return true;
    }
});

Es gibt einige Threads bei Stackoverflow oder anderen Seiten zu diesem "Problem". Dort wird gesagt, dass die Child-Views selektierbar sein müssen, aber den Fokus nicht übernehmen dürfen. Beides bewirkt bei mir leider immernoch keine Lösung:

Code:
@Override
public boolean isChildSelectable(int groupPosition, int childPosition) {
    return true;
}

Code:
<LinearLayout
    android:orientation="horizontal"
    android:focusable="false">

    <ImageView
        android:focusable="false"
        ...
        />

    <ImageButton
        android:focusable="false"
        ...
        />

        ...

Es gab auch mal den Hinweis, dass zusätlich die Items nicht clickable sein sollten:

Code:
<LinearLayout
    android:orientation="horizontal"
    android:clickable="false"
    android:focusable="false">

    <ImageView
        android:clickable="false"
        android:focusable="false"
        ...
        />

    <ImageButton
        android:clickable="false"
        android:focusable="false"
        ...
        />

        ...

Aber egal ob ich nur die oberste View oder alle ändere: onChildClick wird nie gefeuert.

Testweise habe ich mal innerhalb des Adapters den ImageButtons direkt einen Listener hinzugefügt: dieser funktioniert korrekt. Weil die ExpandableListView aber bereits einen Listener dafür anbietet, wollte ich auch diesen nutzen.

Kennt jemand mal dieses Problem oder hat vielleicht eine Idee, an was es sonst noch liegen könnte?
 
Ich hatte vor längerem mal das gleiche Problem. Ohne der Sache je auf den Grund gegangen zu sein, habe ich per Code den Fokus genommen. Das gab mir die Clickevents wieder.

Also im Adapter die ImageViews holen und dann per .setFocusable(false);
die Sache abhaken.
 
  • Danke
Reaktionen: Zoopa
Ok, das werd ich mal noch testen, Danke. Ich hatte angenommen, dass diese Methode dasselbe bewirkt, aber vielleicht hängts ja irgendwie an den verschachtelten Views oder dem View Recycling, dass etwas mit der XML-Variante nicht funktioniert.

Update: Funktioniert so tatsächlich!
 
Zuletzt bearbeitet:
Zurück
Oben Unten