Uygulamam için bir alışveriş sepeti oluşturuyorum. Parçada RecyclerView
ve statik View
kullandım. RecyclerView
ürünümde delete
düğmesi var.Geri dönüşüm listesi görünümü görünümünde değişiklik yapıldıktan sonra parça üzerindeki metin görünümünü güncellemek için uygun mantık nedir?
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
}
}
Benim 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);
}
Şu anda ilk kez tüm ürünlerin toplam miktar alıyorum, ama am ben herhangi bir öğeyi silerseniz listeden veya güncelleme miktarından toplam miktarım değişmedi. Ekran aşağıya benzer görünüyor, sadece kitap yerine şimdi sil düğmesi var.
NOT: Ben sonrası kısa tutmak için, bilerek bu yazı içinde webServiceCall()
yılında HttpUrlConnection
kodu RecyclerView.Adapter
baz yöntemlerin vb gibi kodumu bazıları atladık.
Sorun şu ki bu bağlamaları nerede kullanacağımı ve bunun için mantığı düzgün bir şekilde nasıl uygulayacağımı bilmiyorum. – Omkar
fakat bunu zaten webServiceCall() 'yönteminde yapıyorsunuz, isminden de anlaşılacağı gibi: web servisini hiç arama, grand fiyatını sayma, grandAmount'u sayma ve gösterme ve adaptör/geridönüşüm göstergesini ayarlama – Selvin
Tekrar hesaplayacak ve 'TextView' silme işlemini silecek bir 'Handler' oluşturunuz. – Omkar