Hier ist eine Möglichkeit, es recht einfach zu implementieren, wenn Sie eine Liste von POJOs haben und einen davon von außerhalb des Adapters abrufen möchten.
In Ihrem Adapter erstellen Sie einen Listener für die Klick-Ereignisse und eine Methode, um ihn festzulegen:
public class MyAdapter extends RecyclerView.Adapter {
...
private List mMyPojos;
private static OnItemClickListener mOnItemClickListener;
...
public interface OnItemClickListener {
public void onItemClick(MyPojo pojo);
}
...
public void setOnItemClickListener(OnItemClickListener onItemClickListener){
mOnItemClickListener = onItemClickListener;
}
...
}
In Ihrem ViewHolder setzen Sie onClickListener um und erstellen ein Klassenmember, um vorübergehend das POJO zu speichern, das die Ansicht darstellt:
public static class ViewHolder extends RecyclerView.ViewHolder implements View.OnClickListener {
public MyPojo mCurrentPojo;
...
public ViewHolder(View view) {
super(v);
...
view.setOnClickListener(this); //Sie könnten dies auch auf einem Teil des Layouts setzen
}
...
@Override
public void onClick(View view) {
if(mOnItemClickListener != null && mCurrentPojo != null){
mOnItemClickListener.onItemClick(mCurrentPojo);
}
}
Zurück in Ihrem Adapter, setzen Sie das aktuelle POJO, wenn der ViewHolder gebunden ist (oder auf null, wenn die aktuelle Ansicht keins hat):
@Override
public void onBindViewHolder(final ViewHolder holder, final int position) {
final MyPojo currentPojo = mMyPojos.get(position);
holder.mCurrentPojo = currentPojo;
...
Das war es, jetzt können Sie es von Ihrem Fragment/Ihrer Aktivität aus wie folgt verwenden:
mMyAdapter.setOnItemClickListener(new mMyAdapter.OnItemClickListener() {
@Override
public void onItemClick(MyPojo pojo) {
//Hier können Sie tun, was Sie wollen mit Ihrem Pojo
}
});