如何在 RecyclerView 适配器中添加 switch 语句?

how to add a switch statement in a RecyclerView adapter?

我有一个带有一些图像的 RecyclerView,在这里我想通过点击不同的图像来打开不同的 Activity... 所以,我认为在适配器的 onClick 中使用 switch 语句可以解决我的问题,但我不知道如何在 RecyclerView 中添加 switch-if 语句 adapter.i 我是 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();

    }
}}

所以我想要的是: 如果用户单击猫图像,我想打开不同的活动,它应该打开一个名为 activity 的猫,如果用户单击狗图像,它应该打开一个名为 activity 的狗...

 @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

      };

}

Returns the Adapter position of the item represented by this ViewHolder.

我对 Java 的经验很少,我只用 Kotlin 编写。这是我想出的。

在 Adapter 本身内设置点击事件并不是最好的方法 practise.According 您应该添加 回调方法 并让 Activity \ Fragment Recycler 在点击事件后附加句柄。

如何进行,

第 1 步:创建一个 Interface,将您的 Adapter 松散地绑定到 ActivityFragment

interface AdapterListener{

void afterAdapterItemClicked(int adapterPosition);

}

Interface 可以在 Adapter 本身内创建为内部成员。

第 2 步:让附加 RecyclerActivityFragment 实现此 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()

   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 着陆了,别担心,我把它留到最后了。

现在,当您在 Activity / Fragment 中创建 RecyclerAdapter 对象(实例)时,您需要在其构造函数中传递当前上下文或 this

RecyclerAdapter(arrayOfImages,this);

现在在 RecyclerAdapter class 中创建一个新的状态变量,例如

private AdapterListener mListener;

然后在RecyclerAdapter的构造函数中你需要添加一个类型的变量 AdapterListener 像这样,然后将接收到的值赋给 mListener

public RecyclerAdapter(int[] images,AdapterListener mListener){
    this.images = images;
    this.mListener = mListener;
}

然后在你的内部 class ImageViewHolder.

中使用 mListener