Zdaję sobie sprawę, że jest wiele odpowiedzi, ale pomyślałem, że mógłbym również przedstawić moją implementację. (Pełne informacje można znaleźć na inne pytanie, na które odpowiedziałem ).
Aby dodać detektor kliknięć, ViewHolder
klasa wewnętrzna musi się zaimplementować View.OnClickListener
. To dlatego, że można ustawić OnClickListener
w itemView
parametrze ViewHolder
„s konstruktora. Pokażę ci, co mam na myśli:
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());
}
}
}
Jedyne inne rzeczy, które musisz dodać, to niestandardowy interfejs dla Twojej Adapter
i metody ustawiającej:
private OnEntryClickListener mOnEntryClickListener;
public interface OnEntryClickListener {
void onEntryClick(View view, int position);
}
public void setOnEntryClickListener(OnEntryClickListener onEntryClickListener) {
mOnEntryClickListener = onEntryClickListener;
}
Tak więc Twoja nowa obsługa kliknięć Adapter
jest zakończona.
Teraz użyjmy go ...
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
}
});
Jest to w zasadzie sposób skonfigurowania normalnego Adapter
, z tą różnicą, że używasz utworzonej przez ciebie metody ustawiającej, aby kontrolować, co zrobisz, gdy użytkownik kliknie określoną pozycję na liście.
Możesz także przejrzeć zestaw przykładów, które podałem w tej Gist na GitHub:
https://gist.github.com/FarbodSalamat-Zadeh/7646564f48ee708c1582c013e1de4f07