首页 > 其他分享 >2022-11-11学习内容

2022-11-11学习内容

时间:2022-11-11 23:11:46浏览次数:48  
标签:11 count int 购物车 学习 tv 2022 import id

1.案例-购物车-加入购物车

1.1MyApplication.java中新增内容:

// 购物车中的商品总数量
    public int goodsCount;

1.2CartInfo.java

package com.example.chapter06.entity;

// 购物车信息
public class CartInfo {
    public int id;
    // 商品编号
    public int goodsId;
    // 商品数量
    public int count;

    public CartInfo() {}

    public CartInfo(int id, int goodsId, int count) {
        this.id = id;
        this.goodsId = goodsId;
        this.count = count;
    }
}

1.3ShoppingDBHelper.java中新增内容:

// 添加商品到购物车
    public void insertCartInfo(int goodsId) {
        // 如果购物车中不存在该商品,添加一条信息
        CartInfo cartInfo = queryCartInfoByGoodsId(goodsId);
        ContentValues values = new ContentValues();
        values.put("goods_id", goodsId);
        if (cartInfo == null) {
            values.put("count", 1);
            mWDB.insert(TABLE_CART_INFO,null,values);
        } else {
            // 如果购物车中已经存在该商品,更新商品数量
            values.put("_id", cartInfo.id);
            values.put("count", ++cartInfo.count);
            mWDB.update(TABLE_CART_INFO,values,"_id=?",new String[]{String.valueOf(cartInfo.id)});
        }
    }

    private CartInfo queryCartInfoByGoodsId(int goodsId) {
        Cursor cursor = mRDB.query(TABLE_CART_INFO, null, "goods_id=?", new String[]{String.valueOf(goodsId)}, null, null, null);
        CartInfo info = null;
        if (cursor.moveToNext()) {
            info = new CartInfo();
            info.id = cursor.getInt(0);
            info.goodsId = cursor.getInt(1);
            info.count = cursor.getInt(2);
        }
        return info;
    }

    // 统计购物车中商品的总数量
    public int countCartInfo() {
        int count = 0;
        String sql = "select sum(count) from " + TABLE_CART_INFO;
        Cursor cursor = mRDB.rawQuery(sql, null);
        if (cursor.moveToNext()) {
            count = cursor.getInt(0);
        }
        return count;
    }

1.4ShoppingChannelActivity.java:

package com.example.chapter06;

import androidx.appcompat.app.AppCompatActivity;

import android.net.Uri;
import android.os.Bundle;
import android.view.LayoutInflater;
import android.view.View;
import android.widget.Button;
import android.widget.GridLayout;
import android.widget.ImageView;
import android.widget.LinearLayout;
import android.widget.TextView;

import com.example.chapter06.database.ShoppingDBHelper;
import com.example.chapter06.entity.GoodsInfo;
import com.example.chapter06.util.ToastUtil;

import java.util.List;

public class ShoppingChannelActivity extends AppCompatActivity {

    // 声明一个商品数据库的帮助器对象
    private ShoppingDBHelper mDBHelper;
    private TextView tv_count;
    private GridLayout gl_channel;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_shopping_channel);
        TextView tv_title = findViewById(R.id.tv_title);
        tv_title.setText("手机商场");

        tv_count = findViewById(R.id.tv_count);
        gl_channel = findViewById(R.id.gl_channel);
        mDBHelper = ShoppingDBHelper.getInstance(this);
        mDBHelper.openReadLink();
        mDBHelper.openWriteLink();

        // 从数据库查询出商品信息,并展示
        showGoods();
    }

    @Override
    protected void onResume() {
        super.onResume();
        // 查询购物车商品总数,并展示
        showCartInfoTotal();
    }

    // 查询购物车商品总数,并展示
    private void showCartInfoTotal() {
        int count = mDBHelper.countCartInfo();
        MyApplication.getInstance().goodsCount = count;
        tv_count.setText(String.valueOf(count));
    }

    private void showGoods() {
        // 商品条目是一个线性布局,设置布局的宽度为屏幕的一半
        int screenWidth = getResources().getDisplayMetrics().widthPixels;
        LinearLayout.LayoutParams params = new LinearLayout.LayoutParams(screenWidth / 2, LinearLayout.LayoutParams.WRAP_CONTENT);
        // 查询商品数据库中的所有商品记录
        List<GoodsInfo> list = mDBHelper.queryAllGoodsInfo();
        for (GoodsInfo info : list) {
            // 获取布局文件item_goods.xml的根视图
            View view = LayoutInflater.from(this).inflate(R.layout.item_goods, null);
            ImageView iv_thumb = view.findViewById(R.id.iv_thumb);
            TextView tv_name = view.findViewById(R.id.tv_name);
            TextView tv_price = view.findViewById(R.id.tv_price);
            Button btn_add = view.findViewById(R.id.btn_add);

            // 给控件设置值
            iv_thumb.setImageURI(Uri.parse(info.picPath));
            tv_name.setText(info.name);
            tv_price.setText(String.valueOf((int)info.price));

            // 添加到购物车
            btn_add.setOnClickListener(v -> {
                addToCart(info.id, info.name);
            });

            // 把商品视图添加到网格布局
            gl_channel.addView(view, params);
        }
    }

    // 把指定编号的商品添加到购物车
    private void addToCart(int goodsId, String goodsName) {
        // 购物车商品数量+1
        int count = ++MyApplication.getInstance().goodsCount;
        tv_count.setText(String.valueOf(count));
        mDBHelper.insertCartInfo(goodsId);
        ToastUtil.show(this, "已添加一部" + goodsName + "到购物车");
    }

    @Override
    protected void onDestroy() {
        super.onDestroy();
        mDBHelper.closeLink();
    }
}

1.5效果:

 点击“加入购物车”,购物车徽标数量加一:

  多添加几个,然后结束掉进程,再次进入APP,可以看到购物车数量仍是正确的:

 查看数据库,可以看到数据库也是正确的,1号商品1个,2号商品6个:

 

标签:11,count,int,购物车,学习,tv,2022,import,id
From: https://www.cnblogs.com/pingfanliliang/p/16879445.html

相关文章

  • 【转】BigPipe学习研究
    1.技术背景FaceBook页面加载技术试想这样一个场景,一个经常访问的网站,每次打开它的页面都要要花费6秒;同时另外一个网站提供了相似的服务,但响应时间只需3秒,那么你会如何选......
  • 2022新年伊始,送你百篇实用文章
    2022年的第一天,美好期许:愿2022所有美好都加倍!感谢大家一路的陪伴,回往2021年的经历,自己可谓是经历了诸多新的事情,同时也希望不负韶华,2022继续向上、向前。回顾过去的2021年......
  • 11.11 小记
    今天一天的感受就是反复被车创。昨天晚上翻来覆去睡不着,早上起来就是感觉被车创了。然后早饭吃了一碗馄炖,吃恶心了。早上上学的时候边走边瞎想,结果身边一堆汽车同时按喇......
  • 2022河南萌新联赛第(五)场:信息工程大学
    2022河南萌新联赛第(五)场:信息工程大学B.交通改造Solution按分值将所有道路从小到大排序,因为要将所有的道路都连通,所以改造的道路数必定是\(\n-1\)条,从小到大将道路连......
  • 2022-2023-1 20221421 《计算机基础与程序设计》第十一周学习总结
    作业信息班级链接:https://edu.cnblogs.com/campus/besti/2022-2023-1-CFAP作业要求:https://www.cnblogs.com/rocedu/p/9577842.html#WEEK11作业目标:TCP/IP包交换 OSIM......
  • nuxtjs3 学习踩坑1 自定义路由的配置
    刚安装的nuxt框架搭配vue3使用路由的时候除了按照约定的规则配置路由以外,还可以使用基于vue-router写法的路由文件去做配置,需要如图所示的位置编写文件:其中这样的路由要......
  • 2022/11/11 集训题解
    今天是双11又是疯狂星期四,所以vivo50。比赛链接T2Description给出\(n\)个点\(m\)条边的图,问有多少种边的子集使得全图是个联通的仙人掌。答案对\(998244353\)取......
  • 年中总结 | 愿自己更好面对未来 2022/6
    还是老规矩,小意境镇楼。前段时间转正后,就一直想写个总结,一方面是简单记录下,另一方面也算是新的征程。当时还在好奇,今年的掘金,年中哪儿去了呢?还好,一切来的刚刚好~在开始今天的......
  • 1109 擅长C(附格式错误的原因)
    题目:1109擅长C 当你被面试官要求用C写一个“HelloWorld”时,有本事像下图显示的那样写一个出来吗?  输入格式: 输入首先给出26个英文大写字母A-Z,每个字母......
  • 设计模式学习(十三):观察者模式
    设计模式学习(十三):观察者模式作者:Grey原文地址:博客园:设计模式学习(十三):观察者模式CSDN:设计模式学习(十三):观察者模式观察者模式观察者模式是一种行为型模式。在对象之间......