Ich bin mir bewusst, dass es viele Antworten gibt, aber ich dachte, ich könnte auch nur meine Implementierung bereitstellen. (Ausführliche Informationen finden Sie auf einer anderen Frage, die ich beantwortet habe ).
Um einen Klick-Listener hinzuzufügen, muss Ihre innere ViewHolder
Klasse implementiert werden View.OnClickListener
. Dies liegt daran, dass Sie einen OnClickListener
auf den itemView
Parameter des ViewHolder
Konstruktors des Konstruktors setzen. Lassen Sie mich Ihnen zeigen, was ich meine:
public class ExampleClickViewHolder extends RecyclerView.ViewHolder implements View.OnClickListener {
TextView text1, text2;
ExampleClickViewHolder(View itemView) {
super(itemView);
// we do this because we want to check when an item has been clicked:
itemView.setOnClickListener(this);
// now, like before, we assign our View variables
title = (TextView) itemView.findViewById(R.id.text1);
subtitle = (TextView) itemView.findViewById(R.id.text2);
}
@Override
public void onClick(View v) {
// The user may not set a click listener for list items, in which case our listener
// will be null, so we need to check for this
if (mOnEntryClickListener != null) {
mOnEntryClickListener.onEntryClick(v, getLayoutPosition());
}
}
}
Die einzigen anderen Dinge, die Sie hinzufügen müssen, sind eine benutzerdefinierte Schnittstelle für Ihre Adapter
und eine Setter-Methode:
private OnEntryClickListener mOnEntryClickListener;
public interface OnEntryClickListener {
void onEntryClick(View view, int position);
}
public void setOnEntryClickListener(OnEntryClickListener onEntryClickListener) {
mOnEntryClickListener = onEntryClickListener;
}
Also dein neues, klickunterstützendes Adapter
abgeschlossen.
Jetzt lass es uns benutzen ...
ExampleClickAdapter clickAdapter = new ExampleClickAdapter(yourObjects);
clickAdapter.setOnEntryClickListener(new ExampleClickAdapter.OnEntryClickListener() {
@Override
public void onEntryClick(View view, int position) {
// stuff that will happen when a list item is clicked
}
});
Es ist im Grunde, wie Sie eine normale einrichten würden Adapter
Methode , außer dass Sie Ihre von Ihnen erstellte Setter-Methode verwenden, um zu steuern, was Sie tun, wenn Ihr Benutzer auf ein bestimmtes Listenelement klickt.
Sie können sich auch eine Reihe von Beispielen ansehen, die ich in diesem Gist auf GitHub erstellt habe:
https://gist.github.com/FarbodSalamat-Zadeh/7646564f48ee708c1582c013e1de4f07