2016-12-15 172 views
0

我有一个带有2个按钮的RecyclerView现在我正在尝试为RecyclerView中的按钮设置onClickListner。我如何为recyclerView中的按钮设置onClickListener?如何在RecyclerView中为按钮设置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; 
} 

回答

1

既然你已经在你的自定义ViewHolder落实到这两个按钮中的一个参考,只需添加一个OnClickListener到每个像这样的片段:

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

你可以在onBindViewHolde中设置监听器r方法。

+0

如果我在我的片段中调用setOnClickListener应用程序崩溃 –

+0

'adapter = new CartRecycleAdapter(arrayList); CartItemRecyclerView.setHasFixedSize(true); layoutManager = new LinearLayoutManager(getActivity()); CartItemRecyclerView.setLayoutManager(layoutManager); CartItemRecyclerView.setLayoutManager(layoutManager); CartItemRecyclerView.setAdapter(adapter); CartItemRecyclerView.setNestedScrollingEnabled(false); BTNQuantityPlus.setOnClickListener(新View.OnClickListener(){ @覆盖 公共无效的onClick(视图v){ } }); 返回视图; }' –

+0

好的,但这是一个单独的问题。 – joelg

1

这样做:

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方法内CLAS setOnClickListener方法,其中数据acually通过创建一个给定的布局的构成不是说你正在使用,以设置适配器的片段它的实例。

1

在你onCreateViewHolder

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

OR

不要在你的RecycleViewHolder构造相同。

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