![](/img/trans.png)
[英]How to set OnClickListener on RecyclerView items inside AsyncTask
[英]How to set OnClickListener() for Button inside RecyclerView
我現在有一個帶有2個按鈕的RecyclerView,我正在嘗試為RecyclerView中的按鈕設置onClickListner。 如何在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);
}
}
}
這是我的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;
}
由於您在自定義ViewHolder實現中同時引用了兩個按鈕,因此只需向每個按鈕添加一個OnClickListener,如下所示:
BTN_QuantityPlus.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
// do your magic here
}
});
您可以在onBindViewHolder方法中設置偵聽器。
做這個:
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);
}
}
注意:您需要在onBindViewHolder方法內加上setOnClickListener方法,在此方法中,將通過數據給定布局組件而不是通過創建適配器實例用於設置適配器的Fragment來對數據進行視聽。
在您的onCreateViewHolder
recycleViewHolder.BTN_QuantityMinus.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
//if you need position, just use recycleViewHolder.getAdapterPosition();
}
});
要么
在您的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.