我正在为我的应用程序创建购物车。我在片段中使用了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);
}
目前我第一次获得所有产品的总金额,但如果我从列表中删除任何项目或更新数量,我的总金额没有变化。屏幕看起来类似于下面的快照,只是有删除按钮而不是现在预订。
注意:我在此帖子中故意省略了HttpUrlConnection
,webServiceCall()
基本方法等中的一些代码,例如RecyclerView.Adapter
代码,以保留帖子短。
答案 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);
}