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

问题描述 投票:-1回答:2

我有一个带有一些图像的RecyclerView,在这里我想通过点击不同的图像打开不同的活动...所以,我认为在适配器的onClick上使用switch语句将解决我的问题,但我不知道如何添加在RecyclerView适配器中的switch-if语句。我是android开发的初学者,所以我需要一些帮助......

没有adapter.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();

    }
}}

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

android android-recyclerview onclick switch-statement android-adapter
2个回答
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表示的项的适配器位置。

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


0
投票

在Adapter本身中设置click事件并不是最好的实践。根据推荐的方法,你应该添加一个回调方法,让点击事件后Activity附加的Fragment \ Recycler处理。

如何进行,

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

interface AdapterListener{

void afterAdapterItemClicked(int adapterPosition);

}

这个Interface可以在Adapter内部作为内部成员创建。

第2步:让Activity附加的FragmentRecycler实现这个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步:现在在click事件后调用方法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;

然后在RecyclerAdapter的构造函数中,您需要像这样添加类型为AdapterListener的变量,然后为mListener分配接收到的值

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

然后在内部类mListener中使用ImageViewHolder

© www.soinside.com 2019 - 2024. All rights reserved.