回收站列表视图项更改后更新片段文本视图的正确逻辑是什么
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);
}
我正在为我的应用程序创建购物车。我在片段中使用了 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);
}