Я знаю, что есть много ответов, но я подумал, что я мог бы просто предоставить свою реализацию этого также. (Более подробную информацию можно найти на другой вопрос, на который я ответил ).
Итак, чтобы добавить прослушиватель кликов, ваш внутренний ViewHolder
класс должен быть реализован View.OnClickListener
. Это потому , что вы подадите OnClickListener
к itemView
параметру ViewHolder
конструктора «S. Позвольте мне показать вам, что я имею в виду:
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());
}
}
}
Единственное, что вам нужно добавить, это пользовательский интерфейс для вашего Adapter
метода и метода установки:
private OnEntryClickListener mOnEntryClickListener;
public interface OnEntryClickListener {
void onEntryClick(View view, int position);
}
public void setOnEntryClickListener(OnEntryClickListener onEntryClickListener) {
mOnEntryClickListener = onEntryClickListener;
}
Итак, ваша новая поддержка кликов Adapter
завершена.
Теперь давайте использовать это ...
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
}
});
Это в основном, как вы бы создали нормальный Adapter
, за исключением того, что вы используете созданный вами метод установки, чтобы контролировать, что вы будете делать, когда ваш пользователь щелкает конкретный элемент списка.
Вы также можете просмотреть ряд примеров, которые я сделал для этого Gist на GitHub:
https://gist.github.com/FarbodSalamat-Zadeh/7646564f48ee708c1582c013e1de4f07