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.
onClickListener
für GridView
hinzufüge: Fehler, weil der Adapter kein Klickereignis hinzufügen kann. onItemClickListener
für GridView
hinzufüge: Ich kann nur feststellen, wo vorhandene Elemente sind (im Bild ist das weiße Feld) 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:)
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.
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 Ссылка
Tags und Links android