2016-12-16 3 views
-1

Я пытаюсь обновить TextView внутри моего фрагмента нажатием кнопки на моем RecyclerView. Я попытался передать Context, но мое приложение разбилось, когда нажал кнопку, если я использую Context. пожалуйста, помогите мне сделать это.Как обновить TextView фрагмента внутри другого класса

Вот мой RecyclerAdapter

public class CartRecycleAdapter extends RecyclerView.Adapter<CartRecycleAdapter.RecycleViewHolder> { 

private ArrayList<CartDataProvider> arraylist = new ArrayList<>(); 
Context CTX; 
public CartRecycleAdapter(ArrayList<CartDataProvider> arraylist, Context ctx){ 
    this.arraylist = arraylist; 
    this.CTX = ctx.getApplicationContext(); 
} 

@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(final RecycleViewHolder holder, int position) { 

    final 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.TXV_Quantity.setText(Integer.valueOf(homeCycleDataProvider.getQuantity()).toString()); 
    holder.ratingBar.setRating(homeCycleDataProvider.getRating()); 

    holder.BTN_QuantityPlus.setOnClickListener(new View.OnClickListener() { 
     @Override 
     public void onClick(View v) { 
      int x = holder.getAdapterPosition(); 
      CartDataProvider homeCycleDataProvider = arraylist.get(x); 
      int quantity = homeCycleDataProvider.getQuantity(); 

      homeCycleDataProvider.setQuantity(++quantity); 
      holder.TXV_Quantity.setText(String.valueOf(homeCycleDataProvider.getQuantity())); 
      TextView textView = (TextView) ((MainActivity)CTX).findViewById(R.id.txt_total_amount); 
      textView.setText("ok"); 
     } 
    }); 
    holder.BTN_QuantityMinus.setOnClickListener(new View.OnClickListener() { 
     @Override 
     public void onClick(View v) { 

      int x = holder.getAdapterPosition(); 
      CartDataProvider homeCycleDataProvider = arraylist.get(x); 
      int quantity = homeCycleDataProvider.getQuantity(); 

      if(quantity != 0){ 
       homeCycleDataProvider.setQuantity(--quantity); 
       holder.TXV_Quantity.setText(String.valueOf(homeCycleDataProvider.getQuantity())); 
       TextView textView = (TextView) ((MainActivity)CTX).findViewById(R.id.txt_total_amount); 
       textView.setText("ok"); 

      } 

     } 
    }); 
} 

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

    } 
} 

Вот мой Fragment.java

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

    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],Quantity); 

     arrayList.add(cartDataProvider); 

     TotalPrice += fixedprice[i]; 
     i++; 
    } 

    adapter = new CartRecycleAdapter(arrayList,getContext()); 
    CartItemRecyclerView.setHasFixedSize(true); 
    layoutManager = new LinearLayoutManager(getActivity()); 
    CartItemRecyclerView.setLayoutManager(layoutManager); 
    CartItemRecyclerView.setAdapter(adapter); 
    CartItemRecyclerView.setNestedScrollingEnabled(false); 

    return view; 
} 
+0

Вместо того, чтобы обновлять TextView непосредственно в вашем ViewHolder, лучшим шаблоном может быть передача некоторого обратного вызова в ваш RecyclerAdapter (который, например, реализует ваш фрагмент) ... таким образом, ваш RecyclerAdapter не связан с определенный фрагмент, который вы используете. –

ответ

0

textview объявить, как static в вашем Fragment Class

public static TextView TXT_TotalAmout, TXT_Quantity; 

сейчас в вашей Recycler view

MyFragClass.TXT_TotalAmount.setText("Your Amount"); 
MyFragClass.TXT_Quantity.setText("Your Amount"); 
+0

спасибо. теперь он работает ..... –

Смежные вопросы