简体   繁体   English

如何在RecyclerView中为Button设置OnClickListener()

[英]How to set OnClickListener() for Button inside RecyclerView

I have a RecyclerView with 2 Buttons now i'm trying to set onClickListner for my Buttons inside RecyclerView. 我现在有一个带有2个按钮的RecyclerView,我正在尝试为RecyclerView中的按钮设置onClickListner。 How can I set onClickListener for my Buttons inside recyclerView? 如何在recyclerView中为我的Button设置onClickListener?

public class CartRecycleAdapter extends RecyclerView.Adapter<CartRecycleAdapter.RecycleViewHolder> {

private ArrayList<CartDataProvider> arraylist = new ArrayList<>();

public CartRecycleAdapter(ArrayList<CartDataProvider> arraylist){
    this.arraylist = arraylist;
}

@Override
public RecycleViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {

    View view = LayoutInflater.from(parent.getContext()).inflate(R.layout.modelcart, parent,false);
    RecycleViewHolder recycleViewHolder = new RecycleViewHolder(view);
    return recycleViewHolder;
}

@Override
public void onBindViewHolder(RecycleViewHolder holder, int position) {

   CartDataProvider homeCycleDataProvider = arraylist.get(position);

    holder.ItemImage.setImageResource(R.drawable.placeholder);
    holder.TXV_ItemName.setText(homeCycleDataProvider.getItemName().toString());
    holder.TXV_PastPrice.setText(String.valueOf(homeCycleDataProvider.getPastPrice()).toString());
    holder.TXV_FixedPrice.setText(String.valueOf(homeCycleDataProvider.getFixedPrice()).toString());
    holder.ratingBar.setRating(homeCycleDataProvider.getRating());
}

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

public static class RecycleViewHolder extends RecyclerView.ViewHolder{

    ImageView ItemImage;
    TextView TXV_ItemName, TXV_PastPrice, TXV_FixedPrice, TXV_Percentage,TXV_Quantity;
    ImageButton BTN_QuantityMinus, BTN_QuantityPlus;
    RatingBar ratingBar;


    public RecycleViewHolder(View view){

        super(view);

        ItemImage = (ImageView) view.findViewById(R.id.item_image);
        TXV_ItemName = (TextView) view.findViewById(R.id.item_name);
        TXV_PastPrice = (TextView) view.findViewById(R.id.past_price);
        TXV_FixedPrice = (TextView) view.findViewById(R.id.fixed_price);
        TXV_Percentage = (TextView) view.findViewById(R.id.percentiage);
        ratingBar = (RatingBar) view.findViewById(R.id.ratingBar);
        TXV_Quantity = (TextView) view.findViewById(R.id.txv_quantity);
        BTN_QuantityMinus = (ImageButton) view.findViewById(R.id.quantity_minus);
        BTN_QuantityPlus = (ImageButton) view.findViewById(R.id.quantity_plus);

    }
}

} }

here is my Fragment for RecyclerView 这是我的RecyclerView片段

 @Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
                         Bundle savedInstanceState) {
    // Inflate the layout for this fragment
    View view = inflater.inflate(R.layout.fragment_cart, container, false);

    TXT_TotalAmout = (TextView) view.findViewById(R.id.txt_total_amount);
    TXT_Quantity = (TextView) view.findViewById(R.id.txv_quantity);
    BTN_QuantityMinus = (ImageButton) view.findViewById(R.id.quantity_minus);
    BTNQuantityPlus = (ImageButton) view.findViewById(R.id.quantity_plus);

    CartItemRecyclerView = (RecyclerView) view.findViewById(R.id.item_recycler_id);

    int i =0;
    for (String name : itemname){

        CartDataProvider cartDataProvider = new CartDataProvider(itemname[i], imageurl[i],
                rating[i],pastprice[i],fixedprice[i]);

        arrayList.add(cartDataProvider);

        TotalPrice += fixedprice[i];
        i++;
    }

    TXT_TotalAmout.setText(Double.valueOf(TotalPrice).toString());
    adapter = new CartRecycleAdapter(arrayList);
    CartItemRecyclerView.setHasFixedSize(true);
    layoutManager = new LinearLayoutManager(getActivity());
    CartItemRecyclerView.setLayoutManager(layoutManager);
    CartItemRecyclerView.setAdapter(adapter);
    CartItemRecyclerView.setNestedScrollingEnabled(false);

    return view;
}

Since you have a reference to both of your buttons in your custom ViewHolder implementation, simply add an OnClickListener to each like so: 由于您在自定义ViewHolder实现中同时引用了两个按钮,因此只需向每个按钮添加一个OnClickListener,如下所示:

BTN_QuantityPlus.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View view) {
            // do your magic here
        }
});

You can set the listener in the onBindViewHolder method. 您可以在onBindViewHolder方法中设置侦听器。

Do this: 做这个:

    public class CartRecycleAdapter extends RecyclerView.Adapter<CartRecycleAdapter.RecycleViewHolder> {

        private ArrayList<CartDataProvider> arraylist = new ArrayList<>();

        public CartRecycleAdapter(ArrayList<CartDataProvider> arraylist){
            this.arraylist = arraylist;
        }

        @Override
        public RecycleViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {

            View view = LayoutInflater.from(parent.getContext()).inflate(R.layout.modelcart, parent,false);
            RecycleViewHolder recycleViewHolder = new RecycleViewHolder(view);
            return recycleViewHolder;
        }

        @Override
        public void onBindViewHolder(RecycleViewHolder holder, int position) {

           CartDataProvider homeCycleDataProvider = arraylist.get(position);

            holder.ItemImage.setImageResource(R.drawable.placeholder);
            holder.TXV_ItemName.setText(homeCycleDataProvider.getItemName().toString());
            holder.TXV_PastPrice.setText(String.valueOf(homeCycleDataProvider.getPastPrice()).toString());
            holder.TXV_FixedPrice.setText(String.valueOf(homeCycleDataProvider.getFixedPrice()).toString());
            holder.ratingBar.setRating(homeCycleDataProvider.getRating());

            /*handle the click in the bindViewHolder inside
            the Recycler Adapter,not the fragment that calls this adapter.*/
            holder.BTN_QuantityMinus.setOnClickListener(new View.OnClickListener() {
                 @Override
                 public void onClick(View v) {
                   //handle the click here.
                 }
            });
            holder.BTN_QuantityPlus.setOnClickListener(new View.OnClickListener() {
                 @Override
                 public void onClick(View v) {
                   // handle the click here.
                 }
            });
        }

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

    public static class RecycleViewHolder extends RecyclerView.ViewHolder{

        ImageView ItemImage;
        TextView TXV_ItemName, TXV_PastPrice, TXV_FixedPrice, TXV_Percentage,TXV_Quantity;
        ImageButton BTN_QuantityMinus, BTN_QuantityPlus;
        RatingBar ratingBar;


        public RecycleViewHolder(View view){

            super(view);

            ItemImage = (ImageView) view.findViewById(R.id.item_image);
            TXV_ItemName = (TextView) view.findViewById(R.id.item_name);
            TXV_PastPrice = (TextView) view.findViewById(R.id.past_price);
            TXV_FixedPrice = (TextView) view.findViewById(R.id.fixed_price);
            TXV_Percentage = (TextView) view.findViewById(R.id.percentiage);
            ratingBar = (RatingBar) view.findViewById(R.id.ratingBar);
            TXV_Quantity = (TextView) view.findViewById(R.id.txv_quantity);
            BTN_QuantityMinus = (ImageButton) view.findViewById(R.id.quantity_minus);
            BTN_QuantityPlus = (ImageButton) view.findViewById(R.id.quantity_plus);

        }
    }

Note: You need to clas setOnClickListener method inside the onBindViewHolder method where the data is acually given the layout components not the Fragment that you are using to set the adapter by creating an instance of it. 注意:您需要在onBindViewHolder方法内加上setOnClickListener方法,在此方法中,将通过数据给定布局组件而不是通过创建适配器实例用于设置适配器的Fragment来对数据进行视听。

In your onCreateViewHolder 在您的onCreateViewHolder

    recycleViewHolder.BTN_QuantityMinus.setOnClickListener(new View.OnClickListener() {
             @Override
             public void onClick(View v) {
               //if you need position, just use recycleViewHolder.getAdapterPosition();
             }
        });

OR 要么

Do the same in your RecycleViewHolder constructor. 在您的RecycleViewHolder构造函数中执行相同的RecycleViewHolder

    BTN_QuantityPlus.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View view) {
            // to get position use getAdapterPosition();
        }
    });

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

相关问题 如何在AsyncTask中的RecyclerView项上设置OnClickListener - How to set OnClickListener on RecyclerView items inside AsyncTask 如何在RecyclerView上设置onClickListener? - How to set onClickListener on RecyclerView? 如何在窗口小部件内的按钮上设置onClickListener? - How to set onClickListener on button inside Widget? 如何在使用recyclerView填充的cardView中添加按钮的OnclickListener? - How to add OnclickListener for button inside a cardView populated using a recyclerView? 如何在Fragments中设置RecyclerView OnClickListener? - How to set RecyclerView OnClickListener in Fragments? RecyclerView 中不总是可见的按钮上的 OnClickListener - OnClickListener on not always visible button inside RecyclerView 在DialogFragment内的按钮上设置onclicklistener - set onclicklistener on a button inside a DialogFragment 如何设置自定义对话框内的onclicklistener按钮 - How to set onclicklistener button which is inside a custom dialog 如何在 Fragments 中设置 RecyclerView OnClickListener 和 OnLongClickListener? - How to set RecyclerView OnClickListener an OnLongClickListener in Fragments? 如何为recyclerview中动态添加的项目设置OnclickListener? - How to set OnclickListener for the dynamically added items in recyclerview?
 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM