2016-12-15 14 views
0

RecyclerView内にButtonのonClickListnerを設定しようとしています。どのように私はボタンのためにonClickListenerを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); 

    } 
} 

}

、カスタムViewHolder実装で、あなたのボタンの両方への参照を持っているので、単純にそのようなそれぞれにOnClickListenerを追加し、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

のための私の断片です。

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.setAdapter(アダプタ); CartItemRecyclerView.setNestedScrollingEnabled(false); BTNQuantityPlus.setOnClickListener(新しいView.OnClickListener(){ @Override公共ボイドの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); 

     } 
    } 

注:データはacually作成することにより、レイアウトコンポーネントを使用すると、アダプタを設定するために使用されていないフラグメントを与えられているonBindViewHolderメソッド内CLASのsetOnClickListener方法に必要それのインスタンス。あなたのonCreateViewHolder

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

OR

1

は、あなたのRecycleViewHolderコンストラクタで同じ操作を行います。

BTN_QuantityPlus.setOnClickListener(new View.OnClickListener() { 
     @Override 
     public void onClick(View view) { 
      // to get position use getAdapterPosition(); 
     } 
    }); 
関連する問題