【问题标题】:Why Single Click don't works on RecyclerView items为什么单击对 RecyclerView 项目不起作用
【发布时间】:2022-01-06 18:43:28
【问题描述】:

我有一个简单的 RecyclerView,其接口链接到活动。 问题recyclerView 中的项目需要双击才能执行操作。

这是AllProductsAdapter 代码:

public class AllProductsAdapter extends RecyclerView.Adapter<AllProductsAdapter.ViewHolder> {

RecyclerViewClickInterfaceNew recyclerViewClickInterface;
List<ProductsModel> productsModelList;
Context context;

public AllProductsAdapter(List<ProductsModel> productsModelList, Context context, RecyclerViewClickInterfaceNew recyclerViewClickInterface) {

    this.productsModelList = productsModelList;
    this.context = context;
    this.recyclerViewClickInterface = recyclerViewClickInterface;
}

@NonNull
@Override
public AllProductsAdapter.ViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
    View view = LayoutInflater.from(context).inflate(R.layout.product_items, parent, false);
    return new AllProductsAdapter.ViewHolder(view);
}

@Override
public void onBindViewHolder(@NonNull AllProductsAdapter.ViewHolder holder, int position) {


    ProductsModel productsModel = productsModelList.get(position);
    PicassoTrustAll.getInstance(context)
            .load(productsModel.getProduct_image())
            .into(holder.catImage);
}

@Override
public int getItemCount() {
    return productsModelList.size();
}

class ViewHolder extends RecyclerView.ViewHolder {
    ImageView catImage;
    TextView catName;
    CardView categoryCard;

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

        catImage = itemView.findViewById(R.id.catImage);
        catName = itemView.findViewById(R.id.catName);
        categoryCard = itemView.findViewById(R.id.categoryCard);
        itemView.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                if (recyclerViewClickInterface != null)
                    recyclerViewClickInterface.onItemClick(v, getAdapterPosition());
            }
        });
    }
}

这是我的RecyclerViewClickInterfaceNew

    public interface RecyclerViewClickInterfaceNew {

    void onItemClick(View view , int position);
    void onLongItemClick(int position);

}

这是我的 MainActivity 代码:

    @Override
    public void onItemClick(View view , int position) {
    ImageView img= view.findViewById(R.id.catImage);
    img.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            Toast.makeText(AllProductsList.this, "Imgclciked", Toast.LENGTH_SHORT).show();
        }
    });

}

在 MainActivity 中,Toast shows after clicking 2 times on the Image. 如何将其修复为正常的单击?请告诉我你的答案。

【问题讨论】:

    标签: android android-recyclerview


    【解决方案1】:

    从此代码

    @Override
        public void onItemClick(View view , int position) {
    
    //when different item is FIRST clicked, a new instance of catImage is produced 
        ImageView img= view.findViewById(R.id.catImage);
    
    //the img onClick is set here to require a second click
        img.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                Toast.makeText(AllProductsList.this, "Imgclciked", Toast.LENGTH_SHORT).show();
            }
        });
    
    }
    

    对于 Recycler View 上的每个新项目,您都重置了点击处理。

    我建议你在 ViewHolder 上设置 onClickListener。这不是最佳做法,但对于您的代码就足够了

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-09-11
      • 1970-01-01
      • 2013-08-11
      • 2021-09-13
      • 2019-12-01
      • 1970-01-01
      相关资源
      最近更新 更多