在回收者列表视图的项目中更改后更新片段上的文本视图的正确逻辑是什么

时间:2016-04-05 09:52:23

标签: android android-fragments logic android-recyclerview

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

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
    }
}

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

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

my cart

注意:我在此帖子中故意省略了HttpUrlConnectionwebServiceCall()基本方法等中的一些代码,例如RecyclerView.Adapter代码,以保留帖子短。

1 个答案:

答案 0 :(得分:0)

我将Adapter和Fragment类放在不同的文件中。我合并了两个类,在Fragment类中创建了私有内部Adapter类,并重新计算销售价格乘以数量的方法,并在我的数量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);
}