Sieh dir meinen Ansatz dazu an:
Erstelle zunächst eine Schnittstelle wie diese:
/**
* Schnittstelle, die zum Delegieren von Klickereignissen in einem {@link android.support.v7.widget.RecyclerView} verwendet wird
* Erstellt von Alex am 28.11.2015.
*/
public Schnittstelle OnRecyclerItemClickListener {
/**
* Wird aufgerufen, wenn ein Klick in der Ansicht eines RecyclerView-Elements auftritt
* @param view, die angeklickt wurde
* @param position der angeklickten Ansicht
* @param item die konkreten Daten, die durch die angeklickte Ansicht angezeigt werden
*/
void onItemClick(View view, int position, T item);
}
Dann erstelle den Adapter:
public Klasse CustomRecyclerAdapter erweitert RecyclerView.Adapter {
private Klasse InternalClickListener implementiert View.OnClickListener{
@Override
public void onClick(View v) {
if(mRecyclerView != null && mItemClickListener != null){
// finde die Position des angeklickten Elements
int position = mRecyclerView.getChildAdapterPosition(v);
Daten data = getItem(position);
// benachrichtige den Hauptlistener
mItemClickListener.onItemClick(v, position, data);
}
}
}
private final OnRecyclerItemClickListener mItemClickListener;
private RecyclerView mRecyclerView;
private InternalClickListener mInternalClickListener;
/**
*
* @param itemClickListener zum Auslösen eines Klickereignisses für ein Element
*/
public PlayerListRecyclerAdapter(OnRecyclerItemClickListener itemClickListener){
mItemClickListener = itemClickListener;
mInternalClickListener = new InternalClickListener();
}
@Override
public RecyclerView.ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
View v = LayoutInflater.from(parent.getContext()).inflate(R.layout.recycler_item, parent, false);
v.setOnClickListener(mInternalClickListener);
ViewHolder viewHolder = new ViewHolder(v);
return viewHolder;
}
@Override
public void onBindViewHolder(RecyclerView.ViewHolder holder, int position) {
// hier die Bindung durchführen
}
@Override
public int getItemCount() {
return mDataSet.size();
}
@Override
public void onAttachedToRecyclerView(RecyclerView recyclerView) {
super.onAttachedToRecyclerView(recyclerView);
mRecyclerView = recyclerView;
}
@Override
public void onDetachedFromRecyclerView(RecyclerView recyclerView) {
super.onDetachedFromRecyclerView(recyclerView);
mRecyclerView = null;
}
public Daten getItem(int position){
return mDataset.get(position);
}
}
Und jetzt schauen wir, wie man dies aus einem Fragment integriert:
public Klasse TestFragment erweitert Fragment implements OnRecyclerItemClickListener{
private RecyclerView mRecyclerView;
@Override
public void onItemClick(View view, int position, Daten item) {
// etwas tun
}
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
return inflater.inflate(R.layout.test_fragment, container, false);
}
@Override
public void onViewCreated(View view, Bundle savedInstanceState) {
mRecyclerView = view.findViewById(idOfTheRecycler);
mRecyclerView .setAdapter(new CustomRecyclerAdapter(this));
}