Wie kann man ein RecyclerView nicht anklickbar machen und das Ereignis an die Elternansicht weiterleiten?

8

Ist es möglich, ein RecyclerView nicht anklickbar zu machen? Ich möchte das, weil mein RecyclerView nur ein paar kleine Symbole innerhalb einer klickbaren CardView zeigt. Wenn also jemand auf die Symbole tippt, sollte er stattdessen nur auf den übergeordneten CardView klicken und animieren.

Ich habe Folgendes versucht:

  1. recyclerView.setClickable(false);
  2. recyclerView.setFocusable(false);
  3. Erweitern Sie RecyclerView und machen Sie onTouchEvent(MotionEvent) return false .
  4. Verwenden Sie Methode 3 oben und verwenden Sie itemView.setClickable(false); im RecyclerView Adapter. Dies funktioniert, der Klick wird an den Eltern gesendet. Jetzt ist RecyclerView jedoch nicht mehr scrollbar.
  5. Legen Sie clickable="false" , focusable="false" , focusableInTouchMode="false" im XML-Verzeichnis für überhöhte Listenelemente fest. (Siehe Kommentar @Ibrahim )
  6. Rufen Sie recyclerView#setLayoutFrozen(true) und itemView.setClickable(false); auf. Das funktioniert, hat aber das gleiche Problem wie # 4.

Gibt es Ideen, wie Sie die Klickereignisse von RecyclerView auf die übergeordnete Ansicht deaktivieren und weiterleiten können? Beachten Sie, dass RecyclerView immer noch scrollbar (horizontal) sein muss.


BEARBEITEN:
Benutzer @ c.dunlap schlug vor, OnClick-Listener auf die Symbole zu setzen und den Klick einfach auf die Klickaktion des übergeordneten Elements umzuleiten . Das würde funktionieren, aber in der Elternansicht wird keine Klick-Animation angezeigt. Und wenn jemand außerhalb von itemView klickt - aber immer noch in RecyclerView (z. B. ItemDecoration padding) - wird der Klick nicht erkannt. Also leider ist das keine Lösung.

    
Thomas Vos 24.07.2017, 20:10
quelle

3 Antworten

2

Meine bevorzugte Vorgehensweise, um solche Dinge zu handhaben, ist das Anhängen eines Listeners von Ihrem Adapter, der aufgerufen wird, wenn auf jedes Symbol in der Recycler-Ansicht geklickt wird. Dann kann Ihre Aktivität in geeigneter Weise reagieren. Zum Beispiel:

%Vor%

Dann können Sie in Ihrer Aktivität einfach eine Instanz von MyAdapterListener erstellen und sie als Listener für den Adapter Ihrer Recycler View festlegen. Wenn iconClicked() function ausgelöst wird, führen Sie den Code aus, der beim übergeordneten Klick ausgeführt werden würde.

    
c.dunlap 24.07.2017 21:29
quelle
1

Sie sollten die übergeordnete Ansicht erweitern und den Klick abfangen, damit die Recycleransicht sie nicht empfängt.

%Vor%

Dank an: Lösung

    
nsL 11.10.2017 14:32
quelle
-1

Ich hatte das gleiche Problem, nachdem ich viel mehr Dinge ausprobiert hatte, benutzte ich ein weiteres Layout über Recyclerview.

%Vor%

Danach kannst du das "LinearLayout" sichtbar und weggehen. Dies funktioniert 100%.

    
Deepak Tiwari 24.07.2017 20:47
quelle