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

时间:2019-05-01 15:07:50

标签: android android-recyclerview onclick switch-statement android-adapter

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

    }
}}

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

2 个答案:

答案 0 :(得分:0)

 @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表示的项目的Adapter位置。

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

答案 1 :(得分:0)

在适配器本身内设置点击事件不是最佳做法。根据推荐的方式,您应该添加回调方法,并让Activity  发生点击事件后,附加了Fragment的\ Recycler的句柄。

如何进行

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

interface AdapterListener{

void afterAdapterItemClicked(int adapterPosition);

}

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

步骤2:让附加了Activity的{​​{1}}或Fragment实现此Recycler,因此,假设您的Interface被命名为{ {1}}

Activity

第3步:现在在MenuActivity / class MenuActivity extends Activity implements AdapterListener{ } 内部实施替代方法

Activity

步骤4:现在在点击事件之后调用方法Fragment

@Override
 void afterAdapterItemClicked(int adapterPosition){

    switch(adapterPosition) {

      case 0: // Move to activity1 
                 break;
      case 1: // Move to activity2 
                 break;

  }

 }

第5步:现在,所有好奇的面孔都在思考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()); } } / mListener内部创建RecyclerAdapter对象(实例)时,您需要在其构造函数中传递当前上下文或Activity

Fragment

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

RecyclerAdapter(arrayOfImages,this);

然后在RecyclerAdapter的构造函数中添加一个类型为 private AdapterListener mListener; 像这样,然后为mListener分配接收到的值

RecyclerAdapter

然后在内部类AdapterListener中使用public RecyclerAdapter(int[] images,AdapterListener mListener){ this.images = images; this.mListener = mListener; }