Android 简单购物车

 

主要逻辑代码:

public class CaetAdapter extends BaseAdapter {

    private Context context;
    private List<HashMap<String, String>> list;
    private HashMap<String, Integer> pitchOnMap;

    public HashMap<String, Integer> getPitchOnMap() {
        return pitchOnMap;
    }

    public void setPitchOnMap(HashMap<String, Integer> pitchOnMap) {
        this.pitchOnMap = pitchOnMap;
    }

    public CaetAdapter(Context context, List<HashMap<String, String>> list) {
        this.context = context;
        this.list = list;

        pitchOnMap = new HashMap<>();
        for (int i = 0; i < list.size(); i++) {
            pitchOnMap.put(list.get(i).get("id"), 0);
        }
    }

    @Override
    public int getCount() {
        return list.size();
    }

    @Override
    public Object getItem(int position) {
        return list.get(position);
    }

    @Override
    public long getItemId(int position) {
        return position;
    }

    @Override
    public View getView(final int position, View convertView, ViewGroup parent) {
        convertView = View.inflate(context, R.layout.item_layout, null);
        final CheckBox checkBox;
        ImageView icon;
        final TextView name, price, num, type, reduce, add;

        checkBox = convertView.findViewById(R.id.check_box);
        icon = convertView.findViewById(R.id.iv_adapter_list_pic);
        name = convertView.findViewById(R.id.tv_goods_name);
        price = convertView.findViewById(R.id.tv_goods_price);
        type = convertView.findViewById(R.id.tv_type_size);
        num = convertView.findViewById(R.id.tv_num);
        reduce = convertView.findViewById(R.id.tv_reduce);
        add = convertView.findViewById(R.id.tv_add);

        name.setText(list.get(position).get("name"));
        price.setText("¥ " + (Integer.valueOf(list.get(position).get("price"))) * (Integer.valueOf(list.get(position).get("count"))));
        type.setText(list.get(position).get("type"));
        num.setText(list.get(position).get("count"));

        if(pitchOnMap.get(list.get(position).get("id"))== 0){
            checkBox.setChecked(false);
        }else{
            checkBox.setChecked(true);
        }

        checkBox.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() {
            @Override
            public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
                if(checkBox.isChecked()){
                    pitchOnMap.put(list.get(position).get("id"),1);
                }else{
                    pitchOnMap.put(list.get(position).get("id"), 0);
                }
                mrefreshPriceInterface.refreshPrice(pitchOnMap);
            }
        });

        //商品数量减
        reduce.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                if (Integer.valueOf(list.get(position).get("count")) <= 1) {
                    Toast.makeText(context, "数量不能再减啦,只能删除!", Toast.LENGTH_SHORT).show();
                } else {
                    list.get(position).put("count", (Integer.valueOf(list.get(position).get("count")) - 1) + "");
                    notifyDataSetChanged();
                }
                mrefreshPriceInterface.refreshPrice(pitchOnMap);
            }
        });
        //商品数量加
        add.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                list.get(position).put("count", (Integer.valueOf(list.get(position).get("count")) + 1) + "");
                notifyDataSetChanged();
                mrefreshPriceInterface.refreshPrice(pitchOnMap);

            }

        });

        return convertView;
    }

    /**
     * 创建接口
     */
    public interface RefreshPriceInterface {
        /**
         * 把价格展示到总价上
         * @param pitchOnMap
         */
        void refreshPrice(HashMap<String, Integer> pitchOnMap);
    }

    /**
     * 定义一个接口对象
     */
    private RefreshPriceInterface mrefreshPriceInterface;

    /**
     * 向外部暴露一个方法
     * 把价格展示到总价上
     * @param refreshPriceInterface
     */
    public void setRefreshPriceInterface(RefreshPriceInterface refreshPriceInterface) {
        mrefreshPriceInterface = refreshPriceInterface;
    }


}

 

MainActivity

 

 

public class MainActivity extends AppCompatActivity implements View.OnClickListener,CaetAdapter.RefreshPriceInterface{

    private LinearLayout top_bar;
    private ListView listview;
    private CheckBox all_chekbox;
    private TextView price;
    private TextView delete;
    private TextView tv_go_to_pay;

    private List<User> goodsList;
    private UserDao userDao;
    private List<HashMap<String,String>> listmap=new ArrayList<>();
    private CaetAdapter adapter;

    private double totalPrice = 0.00;
    private int totalCount = 0;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        initView();
    }

    private void initView() {
        top_bar = (LinearLayout) findViewById(R.id.top_bar);
        listview = (ListView) findViewById(R.id.listview);
        all_chekbox = (CheckBox) findViewById(R.id.all_chekbox);
        price = (TextView) findViewById(R.id.tv_total_price);
        delete = (TextView) findViewById(R.id.tv_delete);
        tv_go_to_pay = (TextView) findViewById(R.id.tv_go_to_pay);

        all_chekbox.setOnClickListener(this);
        delete.setOnClickListener(this);
        tv_go_to_pay.setOnClickListener(this);

        initDate();
        adapter = new CaetAdapter(MainActivity.this, listmap);
        listview.setAdapter(adapter);
        adapter.setRefreshPriceInterface(this);
    }

    @Override
    public void onClick(View v) {
        switch (v.getId()) {
            case R.id.all_chekbox:
                AllTheSelected();
                break;
            case R.id.tv_delete:
                checkDelete(adapter.getPitchOnMap());
                break;
            case R.id.tv_go_to_pay:
                if(totalCount<=0){
                    Toast.makeText(this,"请选择要付款的商品~",Toast.LENGTH_SHORT).show();
                }else{
                    Toast.makeText(this,"付款成功",Toast.LENGTH_SHORT).show();
                }
                break;
        }
    }
    /**
     * 数据
     */
    private void initDate() {
        //创建集合
        goodsList = new ArrayList<>();
        //数据库
        userDao = Myapplication.getInstances().getDaoSession().getUserDao();
        userDao.deleteAll();
        //数据源
        for (int i = 0; i < 10; i++) {
            //向数据库存放数据
            User user = new User((long) i,
                    "购物车里的第" + (i + 1) + "件商品",
                    (i + 20) + "码",
                    "10",
                    "10");
            userDao.insert(user);
        }
        //从数据库中把数据放到集合中
        goodsList=userDao.loadAll();
        //把结合中的数据放到HashMap集合中
        for(int i=0;i<goodsList.size();i++){
            HashMap<String,String> map=new HashMap<>();
            map.put("id",goodsList.get(i).getId()+"");
            map.put("name",goodsList.get(i).getName());
            map.put("type",(goodsList.get(i).getType()));
            map.put("price",goodsList.get(i).getPrice()+"");
            map.put("count",goodsList.get(i).getCount()+"");
            listmap.add(map);
        }
    }

    @Override
    public void refreshPrice(HashMap<String, Integer> pitchOnMap) {
        priceControl(pitchOnMap);
    }

    /**
     *  控制价格展示总价
     */
    private void priceControl(Map<String, Integer> pitchOnMap){
        totalCount = 0;
        totalPrice = 0.00;
        for(int i=0;i<listmap.size();i++){
            if(pitchOnMap.get(listmap.get(i).get("id"))==1){
                totalCount=totalCount+Integer.valueOf(listmap.get(i).get("count"));
                double goodsPrice=Integer.valueOf(listmap.get(i).get("count"))*Double.valueOf(listmap.get(i).get("price"));
                totalPrice=totalPrice+goodsPrice;
            }
        }
        price.setText(" ¥ "+totalPrice);
        tv_go_to_pay.setText("付款("+totalCount+")");
    }

    /**
     *  删除  控制价格展示总价
     * @param map
     */
    private void checkDelete(Map<String,Integer> map){
        List<HashMap<String,String>> waitDeleteList=new ArrayList<>();
        Map<String,Integer> waitDeleteMap =new HashMap<>();
        for(int i=0;i<listmap.size();i++){
            if(map.get(listmap.get(i).get("id"))==1){
                waitDeleteList.add(listmap.get(i));
                waitDeleteMap.put(listmap.get(i).get("id"),map.get(listmap.get(i).get("id")));
            }
    }
        listmap.removeAll(waitDeleteList);
        map.remove(waitDeleteMap);
        priceControl(map);
        adapter.notifyDataSetChanged();
    }
    /**
     *全选或反选
     */
    private void AllTheSelected(){
        HashMap<String,Integer> map=adapter.getPitchOnMap();
        boolean isCheck=false;
        boolean isUnCheck=false;
        Iterator iter = map.entrySet().iterator();
        while (iter.hasNext()) {
            Map.Entry entry = (Map.Entry) iter.next();

            if(Integer.valueOf(entry.getValue().toString())==1){
                isCheck=true;
            }else{
               isUnCheck=true;
            }
        }
        if(isCheck==true&&isUnCheck==false){//已经全选,做反选
            for(int i=0;i<listmap.size();i++){
                map.put(listmap.get(i).get("id"),0);
            }
            all_chekbox.setChecked(false);
        }else if(isCheck==true && isUnCheck==true){//部分选择,做全选
            for(int i=0;i<listmap.size();i++){
                map.put(listmap.get(i).get("id"),1);
            }
            all_chekbox.setChecked(true);
        }else if(isCheck==false && isUnCheck==true){//一个没选,做全选
            for(int i=0;i<listmap.size();i++){
                map.put(listmap.get(i).get("id"),1);
            }
            all_chekbox.setChecked(true);
        }
        priceControl(map);
        adapter.setPitchOnMap(map);
        adapter.notifyDataSetChanged();
    }

}

项目地址:

https://github.com/King-GWJ/ShoppingDemo

 

 

  • 2
    点赞
  • 43
    收藏
    觉得还不错? 一键收藏
  • 6
    评论
### 回答1: Android Studio可以帮助开发者创建一个简单购物应用。购物应用有以下基本功能: 1. 商品列表:在应用中展示各种商品的信息,包括名称、价格、描述等。可以使用RecyclerView来展示商品列表,并通过适配器将数据与界面绑定。 2. 添加商品:在商品列表中,可以为每个商品添加一个按钮,点击按钮可以将该商品添加到购物中。可以使用SQLite数据库来存储购物中的商品信息。 3. 购物界面:可以创建一个新的界面来显示购物中的商品列表。可以使用ListView或RecyclerView来展示购物中的商品信息,并通过适配器将数据与界面绑定。购物界面应该显示每个商品的名称、价格以及数量,并提供删除按钮以删除商品。 4. 计算总价:在购物界面中,可以增加一个总价的文本框,用于显示购物中所有商品的总价格。当增加或删除商品时,应重新计算总价。 5. 结算:在购物界面中,可以添加一个结算按钮,用于完成购物操作。点击结算按钮后,可以跳转到支付页面或者其他相关操作页面。 6. 数据持久化:可以使用SharedPreferences或SQLite来存储购物数据,确保应用在关机或重启后仍能保留购物中的商品信息。 以上是一个简单购物应用的基本功能。当然,根据实际需要,你也可以添加更多的功能,如商品搜索、商品分类、优惠券等。希望以上回答对你有所帮助! ### 回答2: Android Studio是一款用于开发Android应用程序的集成开发环境。购物是一个常见的功能,在Android Studio中可以很容易地实现一个简单购物。 首先,我们需要创建一个存储商品信息的数据结构。可以使用一个Java类来表示商品,包含成员变量如商品名称、价格、数量等。然后,创建一个列表来存储用户选择的商品。 接下来,我们需要创建一个界面来展示商品信息和购物的功能。使用Android Studio提供的UI设计工具,我们可以方便地创建一个购物界面。在界面中,可以展示商品的图片、名称、价格等信息,并提供加入购物的按钮。 当用户点击加入购物按钮时,我们将所选商品加入到购物列表中。可以使用一个ArrayList来实现购物列表,每次点击加入购物按钮时,将选中的商品对象加入到列表中。 在购物界面中,我们可以展示购物中的商品列表。可以使用RecyclerView来展示购物列表,通过适配器将购物列表和RecyclerView进行绑定。在适配器中,通过循环遍历购物列表,将商品的名称、价格等信息绑定到购物界面的UI控件上。 用户可以选择购物中的商品进行删除操作。可以在购物列表中添加删除按钮,当用户点击删除按钮时,从购物列表中移除对应的商品。也可以使用滑动删除的方式,当用户滑动一个商品项时,自动将其移除。 最后,我们可以在购物界面增加结算功能,当用户点击结算按钮时,计算购物中所有商品的总价格,并展示在界面上。 通过以上步骤,我们可以轻松地在Android Studio中实现一个简单购物。用户可以浏览商品,加入购物、删除购物中的商品,并进行结算。这样的购物对于小型商城或电子商务应用来说是十分实用的。 ### 回答3: 购物是一个用于保存用户所选购商品的功能模块,在购物过程中方便用户查看购物清单、编辑数量以及结算支付等功能。Android Studio是一个用于开发Android应用程序的集成开发环境。 为了实现一个简单购物功能,可以考虑以下步骤: 1. 创建购物界面:在Android Studio中创建一个布局文件,设计购物界面,包括商品列表、商品数量、总价等控件。 2. 商品添加到购物:当用户在应用中选择某个商品时,将该商品的信息添加到购物中。可以通过点击按钮或者拖动商品到购物的方式实现。 3. 购物展示和编辑:在购物界面中显示已选商品的列表,并允许用户编辑商品数量。可以使用RecyclerView控件来展示购物中的商品列表,通过适配器来管理数据。 4. 计算总价:根据购物中每个商品的数量和价格,计算所有商品的总价,并在购物界面中显示出来。 5. 结算支付:在购物界面中添加支付按钮,当用户点击支付按钮时,跳转到支付界面或弹出支付选项,让用户选择支付方式完成购物流程。 以上是一个简单购物的实现步骤。当然,在实际应用中,还可以考虑加入对商品的增删改查功能、优惠券、配送方式等更复杂的功能。总之,通过Android Studio的开发工具和相关控件,可以方便地实现一个购物的功能模块。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 6
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值