Android: Erkennen eines Klickereignisses im leeren Bereich von gridview innerhalb von linearlayout

8

Ich habe ein folgendes Problem. Ich habe ein GridView in LinearLayout als Bild unten. Ich möchte ein Klickereignis erkennen, wenn der Benutzer auf den leeren Bereich von GridView klickt, im Bild ist der gewünschte Ort der rote Bereich und auch der grüne Bereich.

Aber ich habe folgende Probleme.

  1. Wenn ich onClickListener für GridView hinzufüge: Fehler, weil der Adapter kein Klickereignis hinzufügen kann.
  2. Wenn ich onItemClickListener für GridView hinzufüge: Ich kann nur feststellen, wo vorhandene Elemente sind (im Bild ist das weiße Feld)
  3. Wenn ich onClickListener für LinearLayout hinzufüge, kann ich ein Klickereignis nur im grünen Bereich und nicht im roten Bereich erkennen.

Wie kann ich das obige Problem beheben?

@Edit: Mein Layout sieht folgendermaßen aus:

%Vor%

Danke:)

    
hqt 08.09.2014, 16:04
quelle

4 Antworten

10

Da dem übergeordneten LinearLayout ein eigenes OnClickListener zugewiesen werden kann, besteht das Problem nur darin, wie ein Klick innerhalb des GridView erkannt wird, der außerhalb seiner untergeordneten Ansichten auftritt. Sie können GridView von der Unterklasse entfernen und die Methode dispatchTouchEvent() überschreiben, um dies zu erreichen. Mit der Methode pointToPosition() können wir feststellen, ob ein Berührungsereignis außerhalb der untergeordneten Ansichten auftritt, und eine Schnittstelle verwenden, um einen Listener zu benachrichtigen, falls dies der Fall ist. Im folgenden Beispiel stellt die Schnittstelle OnNoItemClickListener diese Funktionalität bereit.

%Vor%     
Mike M. 08.09.2014, 18:16
quelle
1

Deklarieren Sie Ihre GridView nicht anklickbar / fokussierbar mit

  

android: clickable="false" und android: focusable="false"

oder

%Vor%

Die Klickereignisse sollten jetzt an das übergeordnete Element der GridView gesendet werden.

  

Hinweis: Um dies zu erreichen, müssen Sie dem direkten Elternelement einen Klick hinzufügen. oder setze android: clickable="false" und   android: focusable="false" zu seinem direkten Elternteil, um den Listener zu übergeben   weiteres Elternteil.

thnx zur Antwort von SIYB Ссылка

    
mhdjazmati 23.12.2015 13:17
quelle
1

U kann sowohl OnItemClickListener als auch OnTouchListener und
setzen Handle Grid View leerer Bereich klickt in den OnTouchListener.

%Vor%     
Sujay U N 10.08.2017 22:55
quelle
0

Sieht so aus, als hätten Sie onClickListener auf falsches Layout gesetzt (Sie setzen es nur auf inneres / grünes Flächenlayout und nicht auf globales RelativeLayout, das Klicks von Raster- und linearen Layouts erfassen kann).

    
Vitaliy A 08.09.2014 16:12
quelle

Tags und Links