[英]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.