-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

相关问题