Ist es möglich, eine Methode aufzurufen, die in Activity
from definiert ist ListAdapter
?
(Ich will ein , um Button
in list's
Reihe und wenn diese Taste angeklickt wird, soll es das Verfahren durchführt, die in entsprechender Aktivität definiert ist. Ich habe versucht, Satz onClickListener
in meiner , ListAdapter
aber ich weiß nicht , wie diese Methode nennen, was sein Weg ist. ..)
Wenn ich verwendet Activity.this.method()
habe, erhalte ich die folgende Fehlermeldung:
No enclosing instance of the type Activity is accessible in scope
Irgendeine Idee ?
android
list
adapter
addressing
user1602687
quelle
quelle
Antworten:
Ja, du kannst.
Im Adapter Neues Feld hinzufügen:
Fügen Sie im Adapterkonstruktor den folgenden Code hinzu:
In der getView (...) des Adapters:
Ersetzen Sie durch Ihre eigenen Klassennamen, in denen Sie Ihren Code, Ihre Aktivität usw. sehen.
Wenn Sie denselben Adapter für mehr als eine Aktivität verwenden müssen, gehen Sie wie folgt vor:
Erstellen Sie eine Schnittstelle
Implementieren Sie diese Schnittstelle in Aktivitäten, für die Sie diese Funktion zum Aufrufen von Methoden benötigen.
Rufen Sie dann in Adapter getView () wie folgt auf:
Du bist fertig. Wenn Sie diesen Adapter für Aktivitäten verwenden müssen, für die dieser Aufrufmechanismus nicht erforderlich ist, wird der Code nicht ausgeführt (wenn die Prüfung fehlschlägt).
quelle
Sie können es so machen:
Schnittstelle deklarieren:
Lassen Sie Ihre Aktivität es umsetzen:
Übergeben Sie dann Ihre Aktivität an ListAdater:
Und irgendwo im Adapter, wenn Sie diese Aktivitätsmethode aufrufen müssen:
quelle
Original:
Ich verstehe die aktuelle Antwort, brauchte aber ein klareres Beispiel. Hier ist ein Beispiel dafür, was ich mit einem
Adapter
(RecyclerView.Adapter) und einem verwendet habeActivity
.In Ihrer Aktivität:
Dies wird das implementieren
interface
, was wir in unserem habenAdapter
. In diesem Beispiel wird es aufgerufen, wenn der Benutzer auf ein Element im Feld klicktRecyclerView
.In Ihrem Adapter:
In der
Activity
haben wir unsere initiiertAdapter
und dies als Argument an den Konstruktor weitergegeben. Dies wirdinterface
unsere Rückrufmethode einleiten . Sie sehen, dass wir unsere Rückrufmethode für Benutzerklicks verwenden.quelle
EventBus
wie vorgeschlagen korrigieren ?Einfach und einfach.
Verwenden Sie dies in Ihrem Adapter einfach.
((YourParentClass) context).functionToRun();
quelle
Ein weiterer Weg ist ::
Schreiben Sie eine Methode in Ihren Adapter, sagen wir public void callBack () {}.
Wenn Sie jetzt ein Objekt für den Adapter in der Aktivität erstellen, überschreiben Sie diese Methode. Die Override-Methode wird aufgerufen, wenn Sie die Methode im Adapter aufrufen.
quelle
Für Kotlin:
Rufen Sie in Ihrem Adapter einfach an
quelle
Diese Bedingung ermöglicht es Ihnen, etwas auszuführen, wenn die Aktivität, die die
GroupView
anfordernden Ansichten von dergetView()
Methode von Ihnen hat,adapter
istyourActivity
HINWEIS:
parent
Ist das GroupViewquelle
getView()
Methode aufruft. Wir erhalten also den Kontext dieser GroupView und untersuchen sie anhand der obigen BedingungIn Kotlin gibt es jetzt eine sauberere Möglichkeit, Lambda-Funktionen zu verwenden, ohne dass Schnittstellen erforderlich sind:
quelle