Android安卓实战项目(7)—购物APP(源码在文末🐕🐕🐕)
一.项目运行介绍
【bilibili展示】 https://www.bilibili.com/video/BV1xh4y1C7o1/?share_source=copy_web&vd_source=b2e9b9ed746acda34f499009647748ed
二.具体实现
(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<Bitmap> bitmaps;
private String goodsName;
private String describe;
private ArrayList<String> tags;
private int price;
public static ArrayList<Goods> 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<Bitmap> getBitmaps() {
return bitmaps;
}
public void setBitmaps(ArrayList<Bitmap> 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<String> getTags() {
return tags;
}
public void setTags(ArrayList<String> 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<Bitmap> bitmaps1 = new ArrayList<>();
bitmaps1.add(BitmapFactory.decodeResource(context.getResources(), R.drawable.renzituo));
goods1.setBitmaps(bitmaps1);
ArrayList<Bitmap> bitmaps2 = new ArrayList<>();
bitmaps2.add(BitmapFactory.decodeResource(context.getResources(), R.drawable.liangxie));
goods2.setBitmaps(bitmaps2);
ArrayList<Bitmap> bitmaps3 = new ArrayList<>();
bitmaps3.add(BitmapFactory.decodeResource(context.getResources(), R.drawable.pixue));
goods3.setBitmaps(bitmaps3);
ArrayList<Bitmap> 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类,它表示一个用于处理不同商品信息的模型或数据结构。它包含属性和方法,用于存储和操作商品的名称、描述、标签、价格和图片等信息。
详细解释如下:
-
属性:
bitmaps
:一个存储Bitmap对象的ArrayList。它用于保存与商品相关的图片。goodsName
:一个表示商品名称的字符串。describe
:一个包含商品描述的字符串。tags
:一个存储商品标签或类别的字符串ArrayList。price
:一个整数,表示商品的价格。
-
静态属性:
GOODSLIST
:一个静态的Goods对象ArrayList。它表示一个列表,存储不同Goods对象的实例。DEULT_GOODS
:一个静态的Goods实例,用作在创建新实例时不指定具体值时的默认对象。构造函数初始化此对象的属性为默认值或空值。
-
构造函数:
Goods()
:默认构造函数,用于初始化属性为默认值。Goods(String goodsName, String describe, String[] tags, int price)
:带参数的构造函数,接受商品名称、描述、标签和价格的值,并初始化相应的属性。
-
Getter和Setter方法:
该类为每个属性提供了Getter和Setter方法,以便访问和修改数据。 -
equals
方法:
equals
方法被重写,用于基于属性(goodsName、tags、describe和price)比较两个Goods对象的相等性。 -
toPriceString
方法:
这是一个静态方法,接受一个整数price
,并将其转换为格式化后的价格字符串。例如,如果价格为50000,它将返回"500.00"。 -
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<Goods> list_goods ;
private final Context context;
public BuyingListAdapter(ArrayList<Goods> list,Context context){
this.list_goods = list;
this.context = context;
}
public void setListGoods(ArrayList<Goods> 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
类,并实现了相关的方法来处理列表数据的显示和交互。
详细解释如下:
-
属性:
list_goods
: 一个存储Goods对象的ArrayList,表示购买商品的列表。context
: 一个Context对象,用于获取当前上下文信息。
-
构造函数:
BuyingListAdapter(ArrayList<Goods> list, Context context)
: 构造函数,接受购买商品列表list
和上下文context
作为参数,并将其分配给适配器的属性。
-
方法:
setListGoods(ArrayList<Goods> list)
: 设置购买商品列表的方法,用于更新list_goods
属性。
-
getCount()
方法:- 重写
BaseAdapter
中的getCount()
方法,返回购买商品列表的项数。
- 重写
-
getItem(int i)
方法:- 重写
BaseAdapter
中的getItem(int i)
方法,返回购买商品列表指定位置的Goods
对象。
- 重写
-
getItemId(int i)
方法:- 重写
BaseAdapter
中的getItemId(int i)
方法,返回指定位置的商品项的ID。
- 重写
-
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
添加点击事件监听器,在点击时弹出对话框显示商品的详细信息。
- 重写
-
点击事件监听器:
- 当用户点击商品项时,会创建一个
GoodsDialog
对话框,并将点击的商品信息传递给对话框的构造函数。 GoodsDialog
是一个自定义的对话框类,可能用于显示商品详细信息和购买选项。
- 当用户点击商品项时,会创建一个
这段代码定义了一个适配器类,用于将购买商品的列表数据显示在Android应用程序的列表视图中。每个商品项由布局文件list_item_buying
定义,包含商品名称、价格和预览图。用户可以点击商品项,在对话框中查看该商品的详细信息。
三.项目源码
链接:https://pan.baidu.com/s/1EThccBhTIY2d-nzFo2OUjQ?pwd=jynl
提取码:jynl
这个项目的话,文件已加密,联系作者得密码,有偿(包括项目改进,技术文档,实验报告)
V:15135757306