2016-04-05 4 views
-1

私のアプリケーションのショッピングカートを作成しています。私は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); 
} 

は、現在、私が最初にすべての製品の合計金額を取得しています、しかし、私は任意の項目を削除した場合リストまたは更新数量から、私の合計金額は変更されませんでした。画面は以下のスナップと似ていますが、今は本の代わりに削除ボタンがあります。

my cart

NOTE:私はポスト短く保つために、わざわざこの記事でwebServiceCall()HttpUrlConnectionコード、RecyclerView.Adapterベース法などのように私のコードの一部を省略しています。

+0

問題は、これらのバインディングをどこで使用するのか、これを正しくロジックを実装する方法がわかりません。 – Omkar

+0

しかし、あなたはすでに 'webServiceCall()'メソッドでそれをやっています - それは名前で言うように、Webサービスを全く呼び出せず、壮大な価格を数え、grandAmountを数えて表示し、アダプタ/リサイクラのビューを設定します – Selvin

+0

再度計算し、削除時に 'TextView'を更新する' handler'を作成しますか? – Omkar

答えて

0

アダプターとフラグメントの両方のクラスが別々のファイルにあります。 Fragmentクラスのプライベート内部アダプタクラスを作成し、数量を掛けた販売価格を再計算し、setOnItemSelectedListener内のtextView、削除リスナーおよび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); 
} 
関連する問題