-2

我想計算清單中物料的價格並將其值存儲在sharedpreference中。每個商品的價格都採用雙倍的形式。問題是當我使用我的方法時,它只考慮列表中的一個項目並計算該值。我正在使用NumberPicker更改項目的數量。計算回收站視圖中物料清單中物料的總價格

這裏是我的適配器處理的項目清單,將在RecyclerView顯示:

public class CartAdapter extends RecyclerView.Adapter<CartAdapter.ViewHolder> { 
    private List<SingleItem> items; 
    private SessionManager sessionManager; 
    private Context context; 
    private int pos; 

    public CartAdapter() { 
    } 

    public CartAdapter(Context context, List<SingleItem> items) { 
     this.items = items; 
     this.context = context; 
     sessionManager = new SessionManager(context); 

    } 

    @Override 
    public ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) { 
     View view = LayoutInflater.from(parent.getContext()).inflate(R.layout.cartitem, parent, false); 
     return new ViewHolder(view); 
    } 

    @Override 
    public void onBindViewHolder(final ViewHolder holder, final int position) { 
     final SingleItem singleItem = items.get(position); 
     holder.tv_title.setText(singleItem.getTitle()); 
     holder.tv_price.setText("Ksh: " + singleItem.getPrice()); 
     Picasso.with(context).load(singleItem.getUrl()).fit().into(holder.imgcart); 
     holder.numcart.setMinValue(1); 
     holder.numcart.setMaxValue(15); 
     holder.numcart.setWrapSelectorWheel(false); 
     int qty = holder.numcart.getValue(); 
     getTotal(qty, singleItem.getPrice()); 
    } 

    public double getTotal(int value, double amount){ 

     double totalamount; 
     double amountall = amount; 
     int quantity = value; 
     totalamount = amountall * quantity; 
     sessionManager.grandtotal("Ksh: " + totalamount); 
     return totalamount; 
    } 


    @Override 
    public int getItemCount() { 
     return items.size(); 
    } 

    public void removeItem(SingleItem item) { 
     sessionManager.removeitem(context,item); 
     items.remove(item); 
     notifyDataSetChanged(); 
    } 

    public class ViewHolder extends RecyclerView.ViewHolder { 
     TextView tv_price; 
     TextView tv_title; 
     NumberPicker numcart; 
     ImageView imgcart; 

     public ViewHolder(View view) { 
      super(view); 

      tv_price = (TextView) view.findViewById(R.id.titlecart); 
      tv_title = (TextView) view.findViewById(R.id.pricecart); 
      numcart = (NumberPicker) view.findViewById(R.id.pickercart); 
      imgcart = (ImageView) view.findViewById(R.id.imgcart); 
     } 
    } 
} 

下面的是我如何在片段顯示RecyclerView:

public class Details extends Fragment { 
    private RecyclerView RecyclerDetails; 
    private TextView CartPrice; 
    private CheckBox CheckCart; 
    private List<SingleItem> list; 
    private CartAdapter adapter; 
    private boolean add = false; 
    private Paint p = new Paint(); 
    private SessionManager sessionManager; 
    private int pos; 



    public Details() { 
     // Required empty public constructor 
    } 


    @Override 
    public View onCreateView(LayoutInflater inflater, ViewGroup container,Bundle savedInstanceState) { 
     // Inflate the layout for this fragment 
     View view = inflater.inflate(R.layout.fragment_details, container, false); 

     RecyclerDetails = (RecyclerView) view.findViewById(R.id.recyclercart); 
     CartPrice = (TextView) view.findViewById(R.id.tvcarttotal); 
     CheckCart = (CheckBox) view.findViewById(R.id.chkcart); 

     sessionManager = new SessionManager(getContext()); 

     Toasty.info(getContext(),"Swipe to go to Next", Toast.LENGTH_SHORT,true).show(); 

     RecyclerDetails.setHasFixedSize(true); 
     RecyclerView.LayoutManager layoutManager = new LinearLayoutManager(getContext()); 
     RecyclerDetails.setLayoutManager(layoutManager); 

     list = sessionManager.getItems(getContext()); 

     HashMap<String,String> map = sessionManager.itemstostring(); 
     String data = map.get(SessionManager.KEY_ITEMS); 
     Log.i(Constants.TAG,data); 

     HashMap<String,String> tot = sessionManager.getgrandtotal(); 
     String total = tot.get(SessionManager.KEY_TOTAL); 

     CartPrice.setText(total); 

     CheckCart.setOnClickListener(new View.OnClickListener() { 
      @Override 
      public void onClick(View v) { 
       if (((CheckBox) v).isChecked()){ 
        sessionManager.saveditems("true"); 
       } else { 
        sessionManager.saveditems("false"); 
       } 
      } 
     }); 

     RecyclerDetails.addOnItemTouchListener(new RecyclerItemClickListener(getContext(), new AdapterView.OnItemClickListener() { 
      @Override 
      public void onItemClick(AdapterView<?> parent, View view, int position, long id) { 

      } 
     })); 


     if(list != null){ 
      adapter = new CartAdapter(getContext(),list); 
      RecyclerDetails.setAdapter(adapter); 
      } 

     initswipe(); 
     return view; 
    } 

    private void initswipe() { 
     ItemTouchHelper.SimpleCallback simpleItemTouchCallback = new ItemTouchHelper.SimpleCallback(0, ItemTouchHelper.RIGHT) { 

      @Override 
      public boolean onMove(RecyclerView recyclerView, RecyclerView.ViewHolder viewHolder, RecyclerView.ViewHolder target) { 
       return false; 
      } 

      @Override 
      public void onSwiped(RecyclerView.ViewHolder viewHolder, int direction) { 
       int position = viewHolder.getAdapterPosition(); 

       if (direction == ItemTouchHelper.RIGHT) { 
        adapter.removeItem(list.get(position)); 
        sessionManager.saveitems(getContext(),list); 

       } 

      } 

      @Override 
      public void onChildDraw(Canvas c, RecyclerView recyclerView, RecyclerView.ViewHolder viewHolder, float dX, float dY, int actionState, boolean isCurrentlyActive) { 

       Bitmap icon; 
       if(actionState == ItemTouchHelper.ACTION_STATE_SWIPE){ 

        View itemView = viewHolder.itemView; 
        float height = (float) itemView.getBottom() - (float) itemView.getTop(); 
        float width = height/3; 

        if(dX > 0){ 
         p.setColor(Color.parseColor("#14a895")); 
         RectF background = new RectF((float) itemView.getLeft(), (float) itemView.getTop(), dX,(float) itemView.getBottom()); 
         c.drawRect(background,p); 
         icon = BitmapFactory.decodeResource(getResources(), android.R.drawable.ic_menu_delete); 
         RectF icon_dest = new RectF((float) itemView.getLeft() + width ,(float) itemView.getTop() + width,(float) itemView.getLeft()+ 2*width,(float)itemView.getBottom() - width); 
         c.drawBitmap(icon,null,icon_dest,p); 
        } else { 
         p.setColor(Color.parseColor("#14a895")); 
         RectF background = new RectF((float) itemView.getRight() + dX, (float) itemView.getTop(),(float) itemView.getRight(), (float) itemView.getBottom()); 
         c.drawRect(background,p); 
         icon = BitmapFactory.decodeResource(getResources(),android.R.drawable.ic_menu_delete); 
         RectF icon_dest = new RectF((float) itemView.getRight() - 2*width ,(float) itemView.getTop() + width,(float) itemView.getRight() - width,(float)itemView.getBottom() - width); 
         c.drawBitmap(icon,null,icon_dest,p); 
        } 
       } 
       super.onChildDraw(c, recyclerView, viewHolder, dX, dY, actionState, isCurrentlyActive); 
      } 
     }; 
     ItemTouchHelper itemTouchHelper = new ItemTouchHelper(simpleItemTouchCallback); 
     itemTouchHelper.attachToRecyclerView(RecyclerDetails); 
    } 

} 

而且最後,這裏是我用來存儲列表中所有項目總值的函數

public void grandtotal (String total){ 
     editor.putString(KEY_TOTAL,total); 
     editor.commit(); 
    } 

    public HashMap<String, String> getgrandtotal(){ 
     HashMap<String, String> tot = new HashMap<>(); 
     tot.put(KEY_TOTAL,pref.getString(KEY_TOTAL,null)); 
     return tot; 
    } 

是否有一個函數,我沒有包含在我正在顯示RecyclerView項目的片段中?

它只是一個小小的變化需要?

+0

你只計算單件商品的價格,這就是爲什麼它只給你總價。把一個for循環,並通過將當前價格加到前一個總數中來計算循環內的總價格 –

回答

2
private int grandTotal(List<SingleItem> items){ 

int totalPrice = 0; 
for(int i = 0 ; i < items.size(); i++) { 
    totalPrice += items.get(i).getPrice(); 
} 

return totalPrice; 
} 

這是你需要實施的方法來獲得總的總價格。當你添加一個項目或從列表中刪除項目時,U可以調用這個方法。

+0

這是偉大的先生,但我在哪裏放這個功能? –

+0

你可以把它放在你想得到總價的地方。當你從列表中刪除項目時,U可以繼續更新總值,就像適配器中的removeItem(SingleItem項目)方法一樣。 – nitish29