【问题标题】:How to update a TextView of Fragment inside other class如何在其他类中更新 Fragment 的 TextView
【发布时间】:2016-12-16 12:20:57
【问题描述】:

我正在尝试通过单击 RecyclerView 的按钮来更新 Fragment 中的 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;
}

【问题讨论】:

  • 与其直接在您的 ViewHolder 中更新 TextView,更好的模式可能是将一些回调传递给您的 RecyclerAdapter(例如您的 Fragment 实现)......这样您的 RecyclerAdapter 不是耦合到您正在使用的特定片段。

标签: android class textview android-recyclerview


【解决方案1】:

在您的Fragment Class 中将您的textview 声明为static

public static TextView TXT_TotalAmout, TXT_Quantity;

现在在你的Recycler view

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-02-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多