Установка событий щелчка внутри самого адаптера не является наилучшей практикой. В соответствии с рекомендуемым способом вы должны добавить метод обратного вызова и позволить Activity
\ Fragment
, к которому прикреплен дескриптор Recycler
после событий щелчка.
Как продолжить,
Шаг 1: Создайте Interface
, который свободно связывает ваши Adapter
с Activity
или Fragment
.
interface AdapterListener{
void afterAdapterItemClicked(int adapterPosition);
}
Этот Interface
может быть создан внутри самого Adapter
как внутренний элемент.
Шаг 2: Пусть Activity
или Fragment
, к которому прикреплен Recycler
, реализуют это Interface
, поэтому предположим, что ваш Activity
назван MenuActivity
class MenuActivity extends Activity implements AdapterListener{
}
Шаг 3: Теперь внутри Activity
/ Fragment
реализуется метод переопределения
@Override
void afterAdapterItemClicked(int adapterPosition){
switch(adapterPosition) {
case 0: // Move to activity1
break;
case 1: // Move to activity2
break;
}
}
Шаг 4: Теперь вызывая метод afterAdapterClicked()
после события click
public static class ImageViewHolder extends RecyclerView.ViewHolder
implements View.OnClickListener {
ImageView imagess;
TextView titless;
public ImageViewHolder(View itemView) {
super(itemView);
imagess = itemView.findViewById(R.id.image);
titless = itemView.findViewById(R.id.title);
itemView.setOnClickListener(this);
}
@Override
public void onClick(View v) {
mListener.afterAdapterItemClicked(getAdapterPosition());
}
}
Шаг 5: Теперь всем любопытным лицам, которые думают, откуда в мире приземлился mListener
, не волнуйтесь, я сохранил его для последнего.
Теперь, когда вы создаете RecyclerAdapter
объект (экземпляр) внутри вашего Activity
/ Fragment
, вам нужно передать текущий контекст или this
в его конструктор.
RecyclerAdapter(arrayOfImages,this);
Теперь создайте новую переменную состояния внутри вашего RecyclerAdapter
класса, например
private AdapterListener mListener;
А затем в конструкторе RecyclerAdapter
вам нужно добавить переменную типа
AdapterListener
вот так и назначьте mListener полученное значение
public RecyclerAdapter(int[] images,AdapterListener mListener){
this.images = images;
this.mListener = mListener;
}
А затем используйте mListener
внутри своего внутреннего класса ImageViewHolder
.