回收站列表视图项更改后更新片段文本视图的正确逻辑是什么

What is proper logic to update text view on fragment after change in item of recycler list view

我正在为我的应用程序创建购物车。我在片段中使用了 RecyclerView 和静态 View 。我的 RecyclerView 项上有 delete 按钮。

RecyclerView.Adapter.java

public class ShoppingCartRecyclerAdapter extends RecyclerView.Adapter<ShoppingCartViewHOlder> {

    //
    // Other `RecyclerView` adapter's methods
    //

    @Override
    public void onBindViewHolder(final ShoppingCartViewHOlder holder, final int position) {

        holder.name.setText(cart.getProductName());                          // name

        holder.sellingPrice.setText(pricePrefix(cart.getSellingPrice()));    // selling price

        // Quantity spinner adapter
        ArrayAdapter<String> spinnerAdapter = new ArrayAdapter<String>(context,
                android.R.layout.simple_spinner_item, PRODUCT_QUANTITY);

        holder.quantity.setAdapter(spinnerAdapter);                             // quantity

        holder.quantity.setSelection(cart.getQuantity() - 1);

        holder.quantity.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() {

            @Override
            public void onItemSelected(AdapterView<?> parent, View view, int position, long id) {
                int quantity = position + 1;

                // selling price as per selected quantity
                holder.sellingPrice.setText(pricePrefix(cart.getSellingPrice() * quantity));

            }

            @Override
            public void onNothingSelected(AdapterView<?> parent) {
                // Quantity not selected
                Toast.makeText(context, "Quantity not selected", Toast.LENGTH_SHORT).show();
            }
        });

        holder.delete.setOnClickListener(new View.OnClickListener() {

            @Override
            public void onClick(View v) {                                           // Delete

                if (isOnline(context)){

                    cartService.removeFromOnlineCart(cart.getProductId());          // remove data from server and db.

                    cartList.remove(position);                                      // remove item from list

                    notifyItemRemoved(position);                                    // notify list changed

                    notifyItemRangeChanged(position, getItemCount());               // to delete item in real time

                } else {

                    offlineMessage(context);
                }
            }
        });
    }
}

class ShoppingCartViewHOlder extends RecyclerView.ViewHolder { 

    Spinner quantity;

    TextView name, sellingPrice, delete;

    public ShoppingCartViewHOlder(View view) {
        super(view);

        name = (TextView) view.findViewById(R.id.my_cart_list_name);                 // name

        sellingPrice = (TextView) view.findViewById(R.id.my_cart_list_price);        // selling price

        quantity = (Spinner) view.findViewById(R.id.my_cart_quantity);               // quantity

        delete = (TextView) view.findViewById(R.id.my_cart_list_delete);             // delete
    }
}

我的Fragment.java

public class MyCartFragment extends Fragment implements View.OnClickListener{

    private List<GetShoppingCartBean> shoppingCartList;

    private RecyclerView recyclerView;

    private ShoppingCartRecyclerAdapter adapter;

    private TextView grandAmount;

    private double sellGrandPrice = 0;  // grand total.

    public MyCartFragment() {}

    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container,
                             Bundle savedInstanceState) {

        // Inflate the layout for this fragment
        View view = inflater.inflate(R.layout.fragment_my_cart, container, false);

        // my other code...

        // Grand total amount
        grandAmount = (TextView) view.findViewById(R.id.my_cart_list_grand_total);

        // Recycler view
        recyclerView = (RecyclerView) view.findViewById(R.id.my_cart_recycler_view);
        recyclerView.setLayoutManager(new LinearLayoutManager(getContext(),
                LinearLayoutManager.VERTICAL, false));            

        // get shopping cart items
        webServiceCall();

        return view;
    }

    /** Fetch cart items from server */
    private void webServiceCall() {

        // My server connector code here to fetch cart items....
        // on received response, if JsonArray is not empty

        // iterating items for selling price adding it to grand amount.
        for(GetShoppingCartBean bean: shoppingCartList){
            sellGrandPrice += bean.getSellingPrice();
        }

        // setting adapter to list view
        adapter = new ShoppingCartRecyclerAdapter(getContext(), shoppingCartList,
                getActivity().getSupportFragmentManager());

        recyclerView.setAdapter(adapter);

        // showing total price of all items.
        DecimalFormat formatter = new DecimalFormat("#,##,##,##,###.00");
        String amount = "Rs. "+ (sellGrandPrice == 0 ? 0 : formatter.format(sellGrandPrice));
        grandAmount.setText(amount);
}

目前我是第一次获取所有产品的总金额,但是如果我从列表中删除任何项目或更新数量,我的总金额没有改变。屏幕看起来类似于下面的快照,只是有删除按钮而不是现在预订。

注意:我在 webServiceCall()RecyclerView.Adapter 基本方法等中省略了一些代码,如 HttpUrlConnection 代码等 post 有意地保持 post 简短。

我将 Adapter 和 Fragment class 放在不同的文件中。我合并了 class,在片段 class 中创建了私有内部适配器 class 和一种重新计算销售价格乘以数量并在我的数量 textView 中更新它的方法 setOnItemSelectedListener、删除侦听器和 Web 服务调用。

private void calculateGrandTotal(List<GetShoppingCartBean> cartBeans){
    double total = 0;
    for(GetShoppingCartBean cart: cartBeans){
        total += (cart.getSellingPriceWithOffer() * cart.getQuantity());
    }
    String price = grandPriceSuffix(total);
    grandAmount.setText(price);
}