In einem einfachen App-Projekt bei GitHub habe ich nur zwei benutzerdefinierte Java-Dateien:
Adapter
und ViewHolder
für die Anzeige von Bluetooth-Geräten in RecyclerView
Die MainActivity. Java enthält eine Methode, die aufgerufen wird, wenn ein Benutzer auf ein Bluetooth-Gerät in RecyclerView
:
Und in der Klasse ViewHolder
(in der DeviceListAdapter.java ) der Klick-Listener ist definiert:
Mein Problem:
So rufen Sie confirmConnection(address)
method von ViewHolder
s onClick
method?
Ich bewege ViewHolder
-Klassen-Deklaration zwischen den 2 Java-Dateien und versuche auch, es in eine eigene Datei zu legen - und finde einfach nicht den richtigen Weg.
Soll ich der ViewHolder
-Klasse ein Feld hinzufügen und (wenn?) einen Verweis auf MainActivity
instance speichern?
UPDATE:
Dies funktioniert bei mir, scheint aber ein Workaround zu sein (und ich dachte auch daran, LocalBroadcastReceiver
zu verwenden - was eine noch hackere Umgehung wäre) -
Um Ihre Klassen voneinander zu entkoppeln, würde ich vorschlagen, eine Schnittstelle auf Ihrem Adapter zu definieren, etwa:
%Vor%Fügen Sie dann in Ihrem Adapter einen Setter hinzu:
%Vor% Dann intern, in Ihrem ViewHolder
onClick()
:
Dann lassen Sie Ihre MainActivity
in einem Listener an die Adapter
übergeben:
Auf diese Weise können Sie den Adapter später wiederverwenden, ohne dass er an dieses spezielle Verhalten gebunden ist.
Für diejenigen, die einen Callback von einem statischen ViewHolder aufrufen möchten, gehen Sie folgendermaßen vor. Lass dir einen Adapter:
%Vor%Dann sollten Sie eine setCallback-Methode hinzufügen und sie aus Aktivität / Fragment aufrufen. Außerdem sollten Sie einen statischen Callback nicht durchführen (dies kann zu Problemen führen, wenn Sie in vielen Klassen denselben Adapter verwenden). Sie sollten ein Feld innerhalb des ViewHolders erstellen. Also:
%Vor%Nachdem Sie den Adapter erstellt haben, können Sie ihn wie folgt aufrufen:
%Vor%Sie können die Activity-Methode aufrufen, indem Sie eine Instanz der Aktivität wie folgt verwenden, innerhalb von MainActivity schreiben Sie unter Code
%Vor%Innenadapter
%Vor%Innerhalb Ihrer onClick-Methode
%Vor%Tags und Links android android-recyclerview android-bluetooth android-viewholder