Как добавить оператор переключения в адаптере RecyclerView? - PullRequest
0 голосов
/ 01 мая 2019

У меня есть RecyclerView с некоторыми изображениями, здесь я хочу открыть разные действия, нажав на разные изображения ... Итак, я думаю, что использование оператора switch в onClick адаптера решит мою проблему, но я не знаю, как добавить оператор switch-if в адаптер RecyclerView. Я новичок в разработке для Android, поэтому мне нужна помощь. ..

myadapter.java

public class RecyclerAdapter extends RecyclerView.Adapter<RecyclerAdapter.ImageViewHolder> {
    @NonNull
    private int[] images;
    public RecyclerAdapter(int[] images){
        this.images =images;
    }
    @Override
    public ImageViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {

        View view = LayoutInflater.from(parent.getContext()).inflate(R.layout.recyclerview_item2,parent,false);
        ImageViewHolder imageViewHolder = new ImageViewHolder(view);
        return imageViewHolder;
    }

    @Override
    public void onBindViewHolder(@NonNull ImageViewHolder holder, int position) {
int image_id =images[position];
holder.imagess.setImageResource(image_id);
    }

    @Override
    public int getItemCount() {
        return images.length;
    }

    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) {
         //   Toast.makeText(itemView.getContext(), "DOWNLOAD ANY TORRENT DOWNLOADER AND OPEN", Toast.LENGTH_LONG).show();

    }
}}

Итак, что я хочу, это: Я хочу открыть различные действия, если пользователь щелкает изображение кошки, он должен открыть действие с именем кошки, и если пользователь щелкает изображение собаки, он должен открывать действие с именем собаки ...

Ответы [ 2 ]

0 голосов
/ 01 мая 2019

Установка событий щелчка внутри самого адаптера не является наилучшей практикой. В соответствии с рекомендуемым способом вы должны добавить метод обратного вызова и позволить 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.

0 голосов
/ 01 мая 2019
 @Override
    public void onClick(View v) {

        switch(getAdapterPosition()) {

          case 0: 
                  Intent intent = new Intent(context, Cat.class);
                  context.startActivity(intent);
                  break;
          case 1: // Open second activity

      };

}

Возвращает позицию адаптера элемента, представленного этим ViewHolder.

У меня очень мало опыта работы с Java, я пишу только на Kotlin. Вот что я придумала.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...