2016-04-05 39 views
-1

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.

my cart

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.

+0

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

+0

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

+0

Tekrar hesaplayacak ve 'TextView' silme işlemini silecek bir 'Handler' oluşturunuz. – Omkar

cevap

0

Her iki Bağdaştırıcı ve Parça sınıfı ayrı dosyalarda da vardı. Her iki sınıfı birleştirdim, Fragment sınıfında özel iç Bağdaştırıcı sınıfı oluşturdum ve nicelik ile çarpılan satış fiyatını yeniden hesaplamak için bir yöntem ve setOnItemSelectedListener numaramın içinde, dinleyiciyi ve web servis çağrısını sil.