2016-12-15 4 views
0

Ich habe einen RecyclerView mit 2 Buttons und ich versuche nun onClickListner für meine Buttons in RecyclerView zu setzen. Wie kann ich OnClickListener für meine Buttons in RecyclerView einstellen?Wie man OnClickListener() für den Button in RecyclerView einstellt

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); 

    } 
} 

}

hier ist mein Fragment für 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; 
} 

Antwort

1

Da Sie einen Verweis auf Ihre beiden Tasten in Ihrer benutzerdefinierten ViewHolder Implementierung haben, einfach eine OnClickListener wie so zu jedem hinzufügen:

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

Sie können den Listener im onBindViewHolde festlegen r Methode.

+0

, wenn ich in meinem setOnClickListener Fragment nennen App abgestürzt –

+0

'adapter = new CartRecycleAdapter (Arraylist); CartItemRecyclerView.setHasFixedSize (true); layoutManager = neuer LinearLayoutManager (getActivity()); CartItemRecyclerView.setLayoutManager (layoutManager); CartItemRecyclerView.setAdapter (Adapter); CartItemRecyclerView.setNestedScrollingEnabled (false); BTNQuantityPlus.setOnClickListener (neu View.OnClickListener() { @Override public void onClick (Blick v) { } }); Rückansicht; } ' –

+0

Ok, aber das ist ein separates Problem. – joelg

1

Tun Sie dies:

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); 

     } 
    } 

Hinweis: Sie müssen cla setOnClickListener Methode innerhalb des onBindViewHolder Verfahren, bei dem die Daten acually die Layoutkomponenten nicht das Fragment gegeben ist, dass Sie den Adapter setzen verwenden, indem eine Schaffung Instanz davon.

1

In Ihrem onCreateViewHolder

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

ODER

Machen Sie dasselbe in Ihrem RecycleViewHolder Konstruktor.

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