Как обрабатывать события нескольких кликов в адаптере recycler в Android studio

#android #button #android-recyclerview #adapter

#Android #кнопка #android-recyclerview #адаптер

Вопрос:

Когда я нажал на кнопку «Добавить в корзину», я также покажу другой продукт, на который нажали. Я хочу установить кнопку «Добавить в корзину», и после увеличения и уменьшения видимости кнопки будет отображаться.

Вот мой код адаптера.

«‘ общедоступный класс PrdouctByCategoryAdapter расширяет RecyclerView.АдаптерViewHolder> {

 private Context mContext;
List<ProductByCategoryModel> productByCategoryModelList;
int quantity1 = 0;
private ProgressDialog pDialog;
CustomSharedPrefs objCustomSharedPrefs;

public PrdouctByCategoryAdapter(Context mContext, List<ProductByCategoryModel> productByCategoryModelList) {
    this.mContext = mContext;
    this.productByCategoryModelList= productByCategoryModelList;

}

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

@SuppressLint("SetTextI18n")
@Override
public void onBindViewHolder(@NonNull final ViewHolder holder, final int position) {

    pDialog = CommonMethod.getProgressDialog(mContext);
    objCustomSharedPrefs = new CustomSharedPrefs(mContext);

    ProductByCategoryModel productByCategoryModel = productByCategoryModelList.get(position);
    holder.qntyAmount.setText(productByCategoryModelList.get(position).getProduct_qty()   productByCategoryModelList.get(position).getProductUnit());
    holder.productPrice.setText("Rs. "   String.valueOf(productByCategoryModelList.get(position).getProduct_mrp_price())   " - ");
    holder.productName.setText(productByCategoryModelList.get(position).getProduct_name());
    Picasso.get().load(productByCategoryModelList.get(position).getMobile_icon()).into(holder.productImage);

    int priceMain = productByCategoryModelList.get(position).getProduct_mrp_price();
    holder.hinditextVeiw.setText("( "   productByCategoryModelList.get(position).getProduct_name_hindi()   " )");

    holder.addtocartbtn.setOnClickListener(v -> {
        if (mContext instanceof ViewProduct) {

            if (Validation.validateString(productByCategoryModelList.get(position).getProduct_id())) {
                ((ViewProduct) mContext).addtoCartCall(productByCategoryModelList.get(position).getProduct_id(),
                        productByCategoryModelList.get(position).getCategory_id(),
                        productByCategoryModelList.get(position).getProduct_qty(),
                        priceMain,
                        productByCategoryModelList.get(position).getMember_id(),
                        productByCategoryModelList.get(position).getSubcategoryName());

                holder.addtocartbtn.setVisibility(View.GONE);
                holder.add_subs.setVisibility(View.VISIBLE);
                holder.totalPrice.setText("₹"   String.valueOf(productByCategoryModel.getProduct_mrp_price()));

                notifyDataSetChanged();
            }
        }


    });


    holder.plus.setOnClickListener(v -> {

        if (mContext instanceof ViewProduct) {

            try {
                quantity1 = quantity1   1;
                int productPrice = productByCategoryModelList.get(position).getProduct_mrp_price() * quantity1;
                int valueQNty = productByCategoryModelList.get(position).getProduct_qty() * quantity1;
                holder.quantity.setText(String.valueOf(quantity1));
                holder.totalPrice.setText("₹"   String.valueOf(productPrice));

                if (Validation.validateString(productByCategoryModelList.get(position).getProduct_id())) {
                    ((ViewProduct) mContext).increaseQntyCall(productByCategoryModelList.get(position).getProduct_id(),
                            productByCategoryModelList.get(position).getCategory_id(),
                            String.valueOf(valueQNty),
                            productPrice,
                            productByCategoryModelList.get(position).getMember_id(),
                            productByCategoryModelList.get(position).getSubcategoryName());

                    notifyDataSetChanged();

                }

            } catch (Exception e) {

            }
        }


    });


    holder.minus.setOnClickListener(v -> {

        try {


            if (quantity1 != 1) {
                if (mContext instanceof ViewProduct) {
                    quantity1 = quantity1 - 1;
                    int productPrice = productByCategoryModelList.get(position).getProduct_mrp_price() * quantity1;
                    int valueQNty = productByCategoryModelList.get(position).getProduct_qty() * quantity1;
                    holder.quantity.setText(String.valueOf(quantity1));
                    holder.totalPrice.setText("₹"   String.valueOf(productPrice));

                    if (Validation.validateString(productByCategoryModelList.get(position).getProduct_id())) {
                        ((ViewProduct) mContext).increaseQntyCall(productByCategoryModelList.get(position).getProduct_id(),
                                productByCategoryModelList.get(position).getCategory_id(),
                                String.valueOf(valueQNty),
                                productPrice,
                                productByCategoryModelList.get(position).getMember_id(),
                                productByCategoryModelList.get(position).getSubcategoryName());

                    }
                }

            } else {
                holder.addtocartbtn.setVisibility(View.VISIBLE);
                holder.add_subs.setVisibility(View.GONE);
            }
        } catch (Exception e) {

        }

        notifyDataSetChanged();

    });


}

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

}

static class ViewHolder extends RecyclerView.ViewHolder {

    ImageView productImage, favourate, plus, minus;
    TextView productName;
    TextView productPrice;
    TextView qntyAmount, quantity, totalPrice;
    Button addtocartbtn;
    TextView hinditextVeiw;
    LinearLayout add_subs;


    public ViewHolder(@NonNull View itemView) {
        super(itemView);
        productImage = itemView.findViewById(R.id.prodcutMainImage);
        productName = itemView.findViewById(R.id.product_name_main_item);
        productPrice = itemView.findViewById(R.id.pricePerqunaty);
        qntyAmount = itemView.findViewById(R.id.peramountQunty);
        //favourate = itemView.findViewById(R.id.img_favroute);
        addtocartbtn = itemView.findViewById(R.id.button_add_toCart1);
        plus = itemView.findViewById(R.id.plus1);
        minus = itemView.findViewById(R.id.minus1);
        quantity = itemView.findViewById(R.id.quantity23);
        add_subs = itemView.findViewById(R.id.add_subs1);
        totalPrice = itemView.findViewById(R.id.totalPrice);
        hinditextVeiw= itemView.findViewById(R.id.hindiStringProdcut);

    }
}
  

}

»’

Ответ №1:

Вы можете легко добиться этого с помощью интерфейса. Сначала вам нужно передать ссылку на интерфейс в вашем классе адаптера, как показано ниже

 class SampleAdapter(
        private val mContext: Context,
        private val sampleModelList: ArrayList<SampleModel>,
        private val onItemClickListener: AddItemToCartClickListener) : RecyclerView.Adapter<SampleAdapter.MyViewHolder>() {****
  

После этого вам нужно создать интерфейс в вашем классе адаптера:

 interface AddToCartListener {
        fun onAddItemToCartClick(
                position: Int,
                view: View,
                itemModel: SampleModel
        )
    }
  

Вы можете вызвать интерфейс в событии нажатия вашей кнопки, например

 holder.itemView.setOnClickListener { view ->
                onItemClickListener.onAddItemToCartClick(
                        position,
                        view,
                        itemModel
                )
            }
    
  

Наконец, просто нужно реализовать интерфейс в вашем классе Activity, и вы получите значение одного элемента.
Теперь вы можете создавать несколько интерфейсов и делать все, что вам нужно.

Ответ №2:

вы можете использовать интерфейс для обработки нескольких событий в recylcerview

пожалуйста, проверьте приведенный ниже пример

https://antonioleiva.com/recyclerview-listener/