Android安卓实战项目(7)---购物APP(源码在文末)

Android安卓实战项目(7)—购物APP(源码在文末)

一.项目运行介绍

【bilibili展示】 https://www.bilibili.com/video/BV1xh4y1C7o1/?share_source=copy_web&vd_source=b2e9b9ed746acda34f499009647748ed
Android安卓实战项目(7)---购物APP(源码在文末)_第1张图片

Android安卓实战项目(7)---购物APP(源码在文末)_第2张图片

Android安卓实战项目(7)---购物APP(源码在文末)_第3张图片

Android安卓实战项目(7)---购物APP(源码在文末)_第4张图片

Android安卓实战项目(7)---购物APP(源码在文末)_第5张图片

Android安卓实战项目(7)---购物APP(源码在文末)_第6张图片

二.具体实现

(1)商品的实现类

Goods.java
package com.ronglin.linshopping.application;


import android.content.Context;
import android.content.pm.ApplicationInfo;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;

import com.ronglin.linshopping.R;

import java.io.InputStream;
import java.lang.annotation.Retention;
import java.util.ArrayList;
import java.util.Arrays;

public class Goods {
    private ArrayList bitmaps;
    private String goodsName;
    private String describe;
    private ArrayList tags;
    private int price;

    public static ArrayList GOODSLIST =new ArrayList<>();
    public static Goods DEULT_GOODS = new Goods();

    public Goods(){
        this.bitmaps = new ArrayList<>();
        this.goodsName = "";
        this.describe = "";
        this.tags = new ArrayList<>();
        this.price = -1;
    }

    public Goods(String goodsName, String describe, String[] tags, int price){
        this();
        this.goodsName = goodsName;
        this.describe = describe;
        this.price = price;
        this.tags.addAll(Arrays.asList(tags));
    }

    public ArrayList getBitmaps() {
        return bitmaps;
    }

    public void setBitmaps(ArrayList  bitmaps) {
        this.bitmaps = bitmaps;
    }

    public String getGoodsName() {
        return goodsName;
    }

    public void setGoodsName(String goodsName) {
        this.goodsName = goodsName;
    }

    public String getDescribe() {
        return describe;
    }

    public void setDescribe(String describe) {
        this.describe = describe;
    }

    public ArrayList getTags() {
        return tags;
    }

    public void setTags(ArrayList tags) {
        this.tags = tags;
    }

    public int getPrice() {
        return price;
    }

    public void setPrice(int price) {
        this.price = price;
    }

    public boolean equals(Goods goods){
        return this.getGoodsName().equals(goods.getGoodsName())
                && this.getTags().equals(goods.getTags())
                && this.getDescribe().equals(goods.getDescribe())
                && this.getPrice() == goods.getPrice();
    }

    public static String toPriceString(int price){
        StringBuffer sb = new StringBuffer(String.valueOf(price));
        //小于2位数
        if (sb.length()<=2)
        {
            if (sb.length() == 0){
                sb.insert(0,"0.00");
            } else if(sb.length() == 1){
                sb.insert(0,"0.0");
            } else if(sb.length() == 2){
                sb.insert(0,"0.");
            }
        } else {
            sb.insert(sb.length()-2,'.');
        }
        return sb.toString();
    }

    public static void getDefaultGoodsList(Context context){

        GOODSLIST.clear();
        Goods goods1 = new Goods("老乡鸡人字拖","夏季人字拖,清凉一夏",new String[]{"板鞋","凉鞋","人字拖"},50000);
        goods1.setDescribe("夏季人字拖,清凉一夏,夏季人字拖,清凉一夏,夏季人字拖,清凉一夏,夏季人字拖,清凉一夏,夏季人字拖,清凉一夏");
        Goods goods2 = new Goods("鸿星尔克大凉鞋","冬季凉鞋,清凉透气",new String[]{"凉鞋","人字拖"},15000);
        goods2.setDescribe("冬季凉鞋,清凉透气,冬季凉鞋,清凉透气,冬季凉鞋,清凉透气,冬季凉鞋,清凉透气,冬季凉鞋,清凉透气,冬季凉鞋,清凉透气");
        Goods goods3 = new Goods("蜜雪冰城小皮靴","冬季皮靴,保暖保温",new String[]{"毛绒"},1500);
        goods3.setDescribe("冬季皮靴,保暖保温,冬季皮靴,保暖保温,冬季皮靴,保暖保温,冬季皮靴,保暖保温,冬季皮靴,保暖保温,冬季皮靴,保暖保温");
        Goods goods4 = new Goods("沙县国际大酒店大拖鞋","应急拖鞋,紧急备用",new String[]{"凉鞋"},100);
        goods4.setDescribe("应急拖鞋,紧急备用,应急拖鞋,紧急备用,应急拖鞋,紧急备用,应急拖鞋,紧急备用,应急拖鞋,紧急备用,应急拖鞋,紧急备用");

        ArrayList bitmaps1 = new ArrayList<>();
        bitmaps1.add(BitmapFactory.decodeResource(context.getResources(), R.drawable.renzituo));
        goods1.setBitmaps(bitmaps1);

        ArrayList bitmaps2 = new ArrayList<>();
        bitmaps2.add(BitmapFactory.decodeResource(context.getResources(), R.drawable.liangxie));
        goods2.setBitmaps(bitmaps2);

        ArrayList bitmaps3 = new ArrayList<>();
        bitmaps3.add(BitmapFactory.decodeResource(context.getResources(), R.drawable.pixue));
        goods3.setBitmaps(bitmaps3);

        ArrayList bitmaps4 = new ArrayList<>();
        bitmaps4.add(BitmapFactory.decodeResource(context.getResources(), R.drawable.tuoxie));
        goods4.setBitmaps(bitmaps4);


        GOODSLIST.add(goods1);
        GOODSLIST.add(goods2);
        GOODSLIST.add(goods3);
        GOODSLIST.add(goods4);
    }

}

这段代码是一个名为Goods的Java类,它表示一个用于处理不同商品信息的模型或数据结构。它包含属性和方法,用于存储和操作商品的名称、描述、标签、价格和图片等信息。

详细解释如下:

  1. 属性:

    • bitmaps:一个存储Bitmap对象的ArrayList。它用于保存与商品相关的图片。
    • goodsName:一个表示商品名称的字符串。
    • describe:一个包含商品描述的字符串。
    • tags:一个存储商品标签或类别的字符串ArrayList。
    • price:一个整数,表示商品的价格。
  2. 静态属性:

    • GOODSLIST:一个静态的Goods对象ArrayList。它表示一个列表,存储不同Goods对象的实例。
    • DEULT_GOODS:一个静态的Goods实例,用作在创建新实例时不指定具体值时的默认对象。构造函数初始化此对象的属性为默认值或空值。
  3. 构造函数:

    • Goods():默认构造函数,用于初始化属性为默认值。
    • Goods(String goodsName, String describe, String[] tags, int price):带参数的构造函数,接受商品名称、描述、标签和价格的值,并初始化相应的属性。
  4. Getter和Setter方法:
    该类为每个属性提供了Getter和Setter方法,以便访问和修改数据。

  5. equals方法:
    equals方法被重写,用于基于属性(goodsName、tags、describe和price)比较两个Goods对象的相等性。

  6. toPriceString方法:
    这是一个静态方法,接受一个整数price,并将其转换为格式化后的价格字符串。例如,如果价格为50000,它将返回"500.00"。

  7. getDefaultGoodsList方法:
    这是一个静态方法,用于使用一些默认的Goods对象填充GOODSLIST ArrayList。它接受一个Context参数,用于检索与商品相关的图像资源。该方法创建四个Goods实例,具有不同的属性,包括名称、描述、标签和价格。它还使用图像资源设置了每个商品对象的关联位图。最后,它将这些Goods对象添加到GOODSLIST ArrayList。

(2)购物车的实现

BuyingListAdapter.java
package com.ronglin.linshopping.application;

import android.annotation.SuppressLint;
import android.content.Context;
import android.view.View;
import android.view.ViewGroup;
import android.widget.BaseAdapter;
import android.widget.ImageView;
import android.widget.TextView;

import com.ronglin.linshopping.GoodsDialog;
import com.ronglin.linshopping.R;

import java.util.ArrayList;

public class BuyingListAdapter extends BaseAdapter {
    private ArrayList list_goods ;
    private final Context context;

    public BuyingListAdapter(ArrayList list,Context context){
        this.list_goods = list;
        this.context = context;
    }

    public void setListGoods(ArrayList list){
        this.list_goods = list;
    }

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

    @Override
    public Object getItem(int i) {
        return list_goods.get(i);
    }

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

    @SuppressLint("ViewHolder")
    @Override
    public View getView(int i, View view, ViewGroup viewGroup) {
        @SuppressLint("ViewHolder") View item_view;
        item_view = View.inflate(this.context, R.layout.list_item_buying,null);

        ImageView imageViewPreviewBuying = item_view.findViewById(R.id.imageViewPreviewBuying);
        TextView textViewGoodsNameBuying = item_view.findViewById(R.id.textViewGoodsNameBuying);
        TextView textViewGoodsPriceBuying = item_view.findViewById(R.id.textViewGoodsPriceBuying);

        item_view.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                GoodsDialog dialog = new GoodsDialog(context,list_goods.get(i));
                dialog.show();
            }
        });

        String t="-"+Goods.toPriceString(list_goods.get(i).getPrice());
        textViewGoodsPriceBuying.setText(t);

        textViewGoodsNameBuying.setText(list_goods.get(i).getGoodsName());

        if (list_goods.get(i).getBitmaps().size() > 0){
            imageViewPreviewBuying.setImageBitmap(list_goods.get(i).getBitmaps().get(0));
        }


        return item_view;
    }
}

这段代码是一个自定义的适配器类BuyingListAdapter,用于在Android应用程序中展示购买商品的列表。适配器继承自BaseAdapter类,并实现了相关的方法来处理列表数据的显示和交互。

详细解释如下:

  1. 属性:

    • list_goods: 一个存储Goods对象的ArrayList,表示购买商品的列表。
    • context: 一个Context对象,用于获取当前上下文信息。
  2. 构造函数:

    • BuyingListAdapter(ArrayList list, Context context): 构造函数,接受购买商品列表list和上下文context作为参数,并将其分配给适配器的属性。
  3. 方法:

    • setListGoods(ArrayList list): 设置购买商品列表的方法,用于更新list_goods属性。
  4. getCount()方法:

    • 重写BaseAdapter中的getCount()方法,返回购买商品列表的项数。
  5. getItem(int i)方法:

    • 重写BaseAdapter中的getItem(int i)方法,返回购买商品列表指定位置的Goods对象。
  6. getItemId(int i)方法:

    • 重写BaseAdapter中的getItemId(int i)方法,返回指定位置的商品项的ID。
  7. getView(int i, View view, ViewGroup viewGroup)方法:

    • 重写BaseAdapter中的getView(int i, View view, ViewGroup viewGroup)方法,用于获取每个商品项的视图,并在列表中显示。
    • 在方法内部,使用View.inflate()方法将自定义的R.layout.list_item_buying布局文件解析为View对象,并分配给item_view
    • 通过item_view.findViewById()方法获取布局文件中的ImageView和TextView视图。
    • 将购买商品的名称、价格和预览图设置到相应的TextView和ImageView中。
    • 为每个商品项的item_view添加点击事件监听器,在点击时弹出对话框显示商品的详细信息。
  8. 点击事件监听器:

    • 当用户点击商品项时,会创建一个GoodsDialog对话框,并将点击的商品信息传递给对话框的构造函数。
    • GoodsDialog是一个自定义的对话框类,可能用于显示商品详细信息和购买选项。

这段代码定义了一个适配器类,用于将购买商品的列表数据显示在Android应用程序的列表视图中。每个商品项由布局文件list_item_buying定义,包含商品名称、价格和预览图。用户可以点击商品项,在对话框中查看该商品的详细信息。

三.项目源码

链接:https://pan.baidu.com/s/1EThccBhTIY2d-nzFo2OUjQ?pwd=jynl
提取码:jynl

这个项目的话,文件已加密,联系作者得密码,有偿(包括项目改进,技术文档,实验报告)

V:15135757306

你可能感兴趣的:(开源项目,android)