Legen Sie ein Klick-listener zu einer RecyclerView
Benutze ich RecyclerView
adapter für die Anzeige von Daten innerhalb einer Aktivität, die ich umsetzen will onClickListener
innerhalb der Aktivität, derzeit bin ich Einstellung onClickListener
innen adapter wie üblich, welches einwandfrei funktioniert.
public void onBindViewHolder(MyHolder holder, final int position) {
final Listdata data = listdata.get(position);
holder.vname.setText(data.getName());
holder.vname.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
Toast.makeText(activity, "clicked on " +position, Toast.LENGTH_SHORT).show();
}
});
}
Möchte ich aber, um es zu implementieren inneren Aktivität, so habe ich mehr Kontrolle. Dies dient nicht mein Ziel. Ich denke, es wird nützlich sein für viele von uns.
In diese Antwort - > stackoverflow.com/a/49821315/7765139 habe ich einen leicht zu bedienenden plugin-Klasse-adapter (ClickableAdapter) fügt hinzu, dass genauso ist wie das setOnClickListener von listviews, aber angepasst für RecyclerViews. So können Sie call-adaoter,setOnClickListener direkt in die Tätigkeit und zum Umgang mit den Klicks gibt es
InformationsquelleAutor Amir De | 2018-04-22
Du musst angemeldet sein, um einen Kommentar abzugeben.
Müssen Sie prüfen, dieses tutorial hier zum besseren Verständnis auf, wie man erreichen kann, das Verhalten, die Sie möchten.
Im Falle der Abwicklung der
onClickListener
von Ihrer Aktivität Sie benötigen, um die Arbeit basiert auf einem callback-Implementierung mit einer Schnittstelle. Übergeben Sie die Schnittstelle aus, die Aktivität auf Ihren adapter und dann rufen Sie die callback-Funktion von deinem adapter, wenn einige Elemente, die geklickt werden.Hier ist eine Beispiel-Implementierung aus dem tutorial.
Lassen Sie uns zuerst über die Schnittstelle.
Müssen Sie zum ändern der adapter auf den Zuhörer wie die parameter wie unten angegeben.
Nun in Ihrem
onBindViewHolder
Methode, stellen Sie den Klick-listener.Setzen Sie den adapter in Ihrem
RecyclerView
.Also der ganze adapter-code sieht wie folgt aus.
Danke für die Erwähnung. Auf jeden Fall, werde ich prüfen die Frage und erhalten zurück zu Ihnen, wenn ich einige Zeit.
kein problem, kann ich verstehen.
InformationsquelleAutor Reaz Murshed
sehr einfache und saubere Lösung ist:
in Ihrem recyclerview Aktivität:
InformationsquelleAutor Null Pointer Exception
Lassen Sie Ihre
Activity
implementiertView.OnClickListener
und übergeben Sie es an den adapter. Unten ist ein Beispiel.Aber zu handhaben, klicken Sie in
Activity
Sie gehen zu müssen angeklickten position ein. Sie können es mitadapter.getAdapterPosition()
zu überprüfen, welches Element geklickt wird.Abgesehen davon, dass, wenn Sie bereits Referenz
Activity
können SieOnClick
im inneren adapter und Aufruf einer öffentlichen Methode derActivity
mit position führen Sie die Aktion.Einen besseren Weg, um die Verarbeitung von Klicks in
ViewHolder
. Siehe das Beispiel weiter unten.InformationsquelleAutor ADM
Wenn ich das richtig verstanden, Sie wollen legen Sie die beim klicken-Logik in der Aktivität.
Können Sie tun dies, indem Sie die OnClickListener in der Aktivität und der übergabe im Adapter-Konstruktor.
Und Ihre MyAdapter Konstruktor wäre:
Also dein neuer code wäre so etwas wie dies
}
InformationsquelleAutor Sila Siebert
Es ist ein weiterer Weg, dies zu tun, überprüfen Sie heraus diese Umsetzung
InformationsquelleAutor Hussain
Fand ich super-duper-easy-Methode! Ich empfehle diese ein
Beispiel-Code:
Und Verwenden RecyclerView Adapter mit folgenden code:
ich fand das von hier
Hoffe es hat dir geholfen.
InformationsquelleAutor Amir De
Habe ich immer ein Generischer Adapter, der in mein Projekt zu vermeiden, machen Sie eine Adapter-Klasse jeden ich benutze eine Recyclerview. Hier einige Beispiel
Und dann in der Activity-Klasse, können Sie diesen adapter mit :
Können Sie wiederverwenden, diese mit 2 oder 3 recyclerview zu.
Deklarieren Sie zunächst eine globar-listener
private AdapterRecyclerviewTextOnly.OnRecyclerviewListener listener;
.Dann init den Hörer mit dem neuen Objekt dann legen Sie die Ihr jedes recyclerview mit dem Hörer. Verwenden Sie spezifische Kennung:
if (recyclerView == recyclerViewA){ } else if (recyclerView == recyclerViewB) { }
verwalten Sie Ihre recyclerview im inneren des Adapters.InformationsquelleAutor MrX