【问题标题】:how to set onclicklistener with int array in recyclerview for cardview android如何在recyclerview中为cardview android设置带有int数组的onclicklistener
【发布时间】:2021-11-28 21:49:40
【问题描述】:

我想使用 if else 语句单击 Cardview 项目并打算进行其他活动。请帮忙。

MainActivity.java

公共类 MainActivity 扩展 AppCompatActivity {

private RecyclerView imagesRV;
private int[] images = {R.drawable.image01, R.drawable.image02, R.drawable.image03, R.drawable.image04, R.drawable.image05, R.drawable.image06, R.drawable.image07, R.drawable.image08};
private RecyclerViewAdapter imageAdapter;
//private ArrayList<String> imagePaths;


@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_home_page);


    imagesRV = (RecyclerView) findViewById(R.id.idRVImages);

    prepareRecyclerView();
}

private void prepareRecyclerView() {
    imageAdapter = new RecyclerViewAdapter(MainActivity.this, images);

    GridLayoutManager manager = new GridLayoutManager(MainActivity.this, 2);

    imagesRV.setLayoutManager(manager);
    imagesRV.setAdapter(imageAdapter);
}

}

RecyclerViewAdapter.java

公共类 RecyclerViewAdapter 扩展 RecyclerView.Adapter {

private final Context context;
private final int[] imagePathArrayList;

public RecyclerViewAdapter(Context context, int[] imagePathArrayList) {
    this.context = context;
    this.imagePathArrayList = imagePathArrayList;
}

@NonNull
@Override
public RecyclerViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
    View view = LayoutInflater.from(parent.getContext()).inflate(R.layout.cardview, parent, false);

    return  new RecyclerViewHolder(view);
}

@Override
public void onBindViewHolder(@NonNull RecyclerViewHolder holder, int position) {
    int imageId = imagePathArrayList[position];

        Picasso.get().load(imageId).placeholder(R.drawable.ic_launcher_background).into(holder.imageIV);

        holder.itemView.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                    
            }
        });
        
}

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

public static class RecyclerViewHolder extends RecyclerView.ViewHolder {

    private final ImageView imageIV;

    public RecyclerViewHolder(@NonNull View itemView) {
        super(itemView);

        imageIV = itemView.findViewById(R.id.idIVImage);
    }
}

}

【问题讨论】:

    标签: java android-studio android-recyclerview android-cardview


    【解决方案1】:
    1. 创建接口:

       public interface MyOnClick {
           void onClick(int imageId);
       }
      
    2. 向构造函数添加对 MyOnClick 的引用

      public class RecyclerViewAdapter extends RecyclerView.Adapter<RecyclerViewAdapter.RecyclerViewHolder> {
          ...
          private final MyOnClick myOnClick;
      
          public RecyclerViewAdapter(Context context, int[] imagePathArrayList, MyOnClick myOnClick) {
              this.context = context;
              this.imagePathArrayList = imagePathArrayList;
              this.myOnClick = myOnClick
          }
          ...
          @Override
          public void onBindViewHolder(@NonNull RecyclerViewHolder holder, int position) {
              final int imageId = imagePathArrayList[position];
              Picasso.get().load(imageId).placeholder(R.drawable.ic_launcher_background).into(holder.imageIV);
      
              holder.itemView.setOnClickListener(new View.OnClickListener() {
                  @Override
                  public void onClick(View v) {
                      myOnClick.onClick(imageId)
                  }
              });
          }
      
    3. 将 MyOnClick 传递给适配器

       public class RecyclerViewAdapter extends RecyclerView.Adapter<RecyclerViewAdapter.RecyclerViewHolder> {
           private RecyclerView imagesRV;
           private int[] images = {R.drawable.image01, R.drawable.image02, R.drawable.image03, R.drawable.image04, R.drawable.image05, R.drawable.image06, R.drawable.image07, R.drawable.image08};
           private RecyclerViewAdapter imageAdapter;
           //private ArrayList<String> imagePaths;
      
           @Override
           protected void onCreate(Bundle savedInstanceState) {
              super.onCreate(savedInstanceState);
              setContentView(R.layout.activity_home_page);
              imagesRV = (RecyclerView) findViewById(R.id.idRVImages);
              prepareRecyclerView();
           }
      
           private void prepareRecyclerView() {
               imageAdapter = new RecyclerViewAdapter(this, images, new MyOnClick() {
                   @Override
                   public void onClick(int imageId) {
                       // Your action
                   }
               });
      
               GridLayoutManager manager = new GridLayoutManager(MainActivity.this, 2);
      
               imagesRV.setLayoutManager(manager);
               imagesRV.setAdapter(imageAdapter);
           }
       }
      

    【讨论】:

      猜你喜欢
      • 2021-03-23
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-09-26
      • 1970-01-01
      • 2018-01-10
      相关资源
      最近更新 更多