网络资源模板--基于 Android Studio 实现的水果商城App

目录

 一、项目测试视频

二、项目简介

三、项目测试环境

四、项目详情设计

Get 项目模板源码


原创项目:基于Android Studio如何实现 购物商城 案例(简单易上手)

 一、项目测试视频

网络资源模板--基于Android Studio 水果商城

二、项目简介

用户端
1.1 账号注册登录功能;
1.2 浏览商品及查看商品详情;分类查询;关键字查询;
1.3 添加购物车及购物车商品结算;移除商品;选择支付方式进行付款;
1.4 个人信息查看及更新;密码更新;
1.5 我的订单;查看订单,订单号查询;
1.6 浏览记录;统计浏览过的商品信息;

管理员端
2.1 账号登陆功能;
2.2 商品查看及修改;分类查询;关键字查询;
2.3 商品上架;
2.4 用户订单;用户订单查询;订单号查询;
2.5 个人信息查看及更新;密码修改;
2.6 用户管理;用户信息增删改查;

三、项目测试环境

10c1df080775455d8425e63a8c46fe36.png

四、项目详情设计

1.所有页面效果图

f5b871795cdb45b4927a2db6708a1ddb.png

02f1b2a2eedf409f8b5152aceffb5dd4.png

这个代码是一个Android应用的活动类,用于添加水果信息。它包括一个标题栏、文本输入框、下拉菜单、图像显示等组件。用户可以输入水果的标题、发布单位、图片地址、类型和描述信息。在保存水果信息时,会检查输入的信息是否为空,以及标题是否已存在,然后将数据保存到本地数据库中。

总体而言,这段代码的功能是实现了水果信息的添加和编辑,并在保存时进行了一些简单的验证和处理,如检查标题是否为空以及是否已存在相同的标题。

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:orientation="vertical" android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:background="@color/colorWhite">
    <!--标题栏-->
    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:background="@drawable/bg_border_bottom">
        <com.example.fruit.widget.ActionBar
            android:id="@+id/myActionBar"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"/>
    </LinearLayout>
    <ImageView
        android:layout_gravity="center"
        android:layout_width="match_parent"
        android:layout_height="100dp"
        android:layout_marginTop="0dp"
        android:layout_marginBottom="10dp"
        android:src="@drawable/a1" />


    <!--表单布局-->
    <ScrollView
        android:layout_width="match_parent"
        android:layout_height="wrap_content">
        <LinearLayout
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:paddingLeft="20dp"
            android:paddingRight="20dp"
            android:orientation="vertical">
            <!--账号-->
            <LinearLayout
                android:layout_width="match_parent"
                android:layout_height="wrap_content"
                android:background="@drawable/bg_border_bottom"
                android:paddingTop="15dp"
                android:paddingBottom="15dp"
                android:orientation="horizontal">
                <!--TextView 文本  html的p标签-->
                <TextView
                    android:layout_width="70dp"
                    android:layout_height="wrap_content"
                    android:gravity="start"
                    android:text="标题:"
                    android:textColor="#000000"
                    android:textSize="14dp" />

                <EditText
                    android:id="@+id/title"
                    android:layout_width="0dp"
                    android:layout_height="wrap_content"
                    android:layout_weight="2"
                    android:background="@null"
                    android:textSize="14dp"

                    android:singleLine="true"
                    android:hint="请输入标题" />
            </LinearLayout>

            <LinearLayout
                android:layout_width="match_parent"
                android:layout_height="wrap_content"
                android:orientation="horizontal">
                <LinearLayout
                    android:layout_width="0dp"
                    android:layout_height="wrap_content"
                    android:layout_weight="1"
                    android:background="@drawable/bg_border_bottom"
                    android:paddingTop="15dp"
                    android:paddingBottom="15dp"
                    android:orientation="horizontal">
                    <!--TextView 文本  html的p标签-->
                    <TextView
                        android:layout_width="70dp"
                        android:layout_height="wrap_content"
                        android:gravity="start"
                        android:text="图片:"
                        android:textColor="#000000"
                        android:textSize="14dp" />

                    <EditText
                        android:id="@+id/img"
                        android:layout_width="0dp"
                        android:layout_height="wrap_content"
                        android:layout_weight="2"
                        android:background="@null"
                        android:textSize="14dp"
                        android:singleLine="true"
                        android:hint="请输入图片地址" />
                </LinearLayout>
                <ImageView
                    android:id="@+id/iv_img"
                    android:layout_width="50dp"
                    android:layout_height="match_parent"
                    android:layout_marginLeft="10dp"/>
            </LinearLayout>
            <LinearLayout
                android:layout_width="match_parent"
                android:layout_height="wrap_content"
                android:background="@drawable/bg_border_bottom"
                android:paddingTop="15dp"
                android:paddingBottom="15dp"
                android:orientation="horizontal">
                <!--TextView 文本  html的p标签-->
                <TextView
                    android:layout_width="70dp"
                    android:layout_height="wrap_content"
                    android:gravity="start"
                    android:text="类型:"
                    android:textColor="#000000"
                    android:textSize="14dp" />
                <Spinner
                    android:id="@+id/type"
                    android:layout_width="match_parent"
                    android:layout_height="wrap_content"
                    android:entries="@array/type"/>
            </LinearLayout>
            <LinearLayout
                android:layout_width="match_parent"
                android:layout_height="wrap_content"
                android:background="@drawable/bg_border_bottom"
                android:paddingTop="15dp"
                android:paddingBottom="15dp"
                android:orientation="horizontal">
                <!--TextView 文本  html的p标签-->
                <TextView
                    android:layout_width="70dp"
                    android:layout_height="wrap_content"
                    android:gravity="start"
                    android:text="价格:"
                    android:textColor="#000000"
                    android:textSize="14dp" />
                <EditText
                    android:id="@+id/issuer"
                    android:layout_width="0dp"
                    android:layout_height="wrap_content"
                    android:layout_weight="2"
                    android:background="@null"
                    android:textSize="14dp"
                    android:singleLine="true"
                    android:hint="请输入价格" />
            </LinearLayout>
            <!--描述-->
            <LinearLayout
                android:layout_width="match_parent"
                android:layout_height="match_parent"
                android:background="@drawable/bg_border_bottom"
                android:paddingTop="15dp"
                android:orientation="vertical">
                <!--TextView 文本  html的p标签-->
                <TextView
                    android:layout_width="70dp"
                    android:layout_height="wrap_content"
                    android:gravity="start"
                    android:textColor="#000000"
                    android:text="商品描述:"
                    android:textSize="14dp" />
                <EditText
                    android:id="@+id/content"
                    android:layout_width="match_parent"
                    android:layout_marginTop="10dp"
                    android:padding="10dp"
                    android:layout_height="match_parent"
                    android:background="@drawable/bg_border_bottom"
                    android:textSize="14dp"
                    android:hint="请输入商品信息" />
            </LinearLayout>
            <!--注册按钮-->
            <Button
                android:onClick="save"
                android:layout_width="match_parent"
                android:layout_height="wrap_content"
                android:layout_marginTop="50dp"
                android:background="@drawable/btn_border_fill"
                android:textColor="@color/colorWhite"
                android:layout_marginBottom="20dp"
                android:textSize="22dp"
                android:textAllCaps="false"
                android:text="保存"/>
        </LinearLayout>
    </ScrollView>

</LinearLayout>

89db9cd95daa458ba660676cb4f75c18.png90fa5e8939b54c58b7041416acb9c174.pngfdca7c2a00d64f4590b68f022efd1fef.png3db04593ef0a4c4e930e68071f9fcdf9.png

87f615be290e46d39a4e2f9ac4815213.png985e64239af244498f2cc6d9cc8d431a.png

这段代码是一个Android应用中的活动(Activity),用于显示水果的详细信息。让我来总结一下:

1. 导入了必要的类和库。
2. 创建了一个继承自AppCompatActivity的FruitDetailActivity类。
3. 在onCreate()方法中,设置了布局文件,并找到了布局中的各个视图组件。
4. 设置了标题栏ActionBar,包括左侧返回按钮的点击事件处理。
5. 通过Intent获取传递过来的Fruit对象,并将其属性设置到对应的视图中,包括标题、上架时间、内容和发布者等。
6. 使用Glide库加载水果的图片,并设置到ImageView中。
7. 根据用户浏览记录和购物车中的商品情况,动态设置了收藏按钮和取消收藏按钮的可见性。
8. 实现了收藏按钮和取消收藏按钮的点击事件处理,分别添加和删除购物车中的商品,并显示相应的Toast提示消息。

这段代码的功能主要是展示商品详情,并提供了收藏和取消收藏的功能。

package com.example.fruit.ui.activity;

import android.app.Activity;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.ImageView;
import android.widget.TextView;
import android.widget.Toast;

import androidx.annotation.Nullable;
import androidx.appcompat.app.AppCompatActivity;

import com.bumptech.glide.Glide;
import com.bumptech.glide.load.engine.DiskCacheStrategy;
import com.example.fruit.R;
import com.example.fruit.bean.Browse;
import com.example.fruit.bean.Car;
import com.example.fruit.bean.Fruit;
import com.example.fruit.util.SPUtils;
import com.example.fruit.widget.ActionBar;

import org.litepal.crud.DataSupport;

import java.text.SimpleDateFormat;
import java.util.Date;


/**
 * 水果明细信息
 */
public class FruitDetailActivity extends AppCompatActivity {
    private Activity mActivity;
    private ImageView ivImg;
    private TextView tvTitle;
    private TextView tvDate;
    private TextView tvContent;
    private TextView tvIssuer;
    private Button btnCollect;
    private Button btnCancel;
    private ActionBar mActionBar;//标题栏
    private SimpleDateFormat sf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
    @Override
    protected void onCreate(@Nullable Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        mActivity = this;
        setContentView(R.layout.activity_fruit_detail);
        ivImg = findViewById(R.id.img);
        tvTitle= findViewById(R.id.title);
        tvDate = findViewById(R.id.date);
        tvContent = findViewById(R.id.content);
        tvIssuer = findViewById(R.id.issuer);
        btnCollect = findViewById(R.id.btn_collect);
        btnCancel = findViewById(R.id.btn_cancel);
        mActionBar = findViewById(R.id.myActionBar);
        //侧滑菜单
        mActionBar.setData(mActivity,"商品详情", R.drawable.ic_back, 0, 0, getResources().getColor(R.color.colorPrimary), new ActionBar.ActionBarClickListener() {
            @Override
            public void onLeftClick() {
                finish();
            }

            @Override
            public void onRightClick() {
            }
        });
        Fruit fruit = (Fruit) getIntent().getSerializableExtra("fruit");
        tvTitle.setText(fruit.getTitle());
        tvDate.setText(String.format("上架时间:%s",fruit.getDate()));
        tvContent.setText(fruit.getContent());
        tvIssuer.setText(String.format("¥ %s",fruit.getIssuer()));
        Glide.with(mActivity)
                .asBitmap()
                .skipMemoryCache(true)
                .load(fruit.getImg())
                .diskCacheStrategy(DiskCacheStrategy.NONE)
                .into(ivImg);
        String account = (String) SPUtils.get(mActivity,SPUtils.ACCOUNT,"");
        //浏览记录
        Browse browse = DataSupport.where("account = ? and title = ?",account,fruit.getTitle()).findFirst(Browse.class);//浏览记录
        if (browse == null) {//不存在该条浏览记录  新增记录
            Browse browse1 = new Browse(account,fruit.getTitle());
            browse1.save();
        }

        Boolean isAdmin = (Boolean) SPUtils.get(mActivity,SPUtils.IS_ADMIN,false);
        if (!isAdmin){
            Car order = DataSupport.where("account = ? and title = ?",account,fruit.getTitle()).findFirst(Car.class);
            btnCollect.setVisibility(order!=null?View.GONE:View.VISIBLE);
            btnCancel.setVisibility(order!=null?View.VISIBLE:View.GONE);
        }
        //收藏
        btnCollect.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                Car car = new Car(fruit.getIssuer(),account,fruit.getTitle(),"S"+System.currentTimeMillis(),account,sf.format(new Date()));
                car.save();
                Toast.makeText(mActivity,"加入购物车成功", Toast.LENGTH_SHORT).show();
                btnCollect.setVisibility(View.GONE);
                btnCancel.setVisibility(View.VISIBLE);
            }
        });
        //取消收藏
        btnCancel.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                Car order = DataSupport.where("account = ? and title = ?",account,fruit.getTitle()).findFirst(Car.class);
                order.delete();
                Toast.makeText(mActivity,"已从购物车移除", Toast.LENGTH_SHORT).show();
                btnCollect.setVisibility(View.VISIBLE);
                btnCancel.setVisibility(View.GONE);
            }
        });
    }
}

36832085bbb14787b90eb7d1928bb476.pnge679fb48c06a419a98b62abe70a47099.png780b177e379c4d53a2247f67c97d3690.pngae9b645b56a44f36bc1e7f9f3b151bbb.png3075ee44a1274103b8533d0b06ef767b.png1bbcfa42c1e44e238178e57b281fb690.png50de7f7dfba44e539fd3c1b396f17429.pngc4926456fdf849ef9bd8b4436f381a17.png

这段代码是一个名为 UserFragment 的 Android Fragment 类,用于显示用户个人中心界面。在 onCreateView 方法中初始化了界面布局,并在 initView 方法中设置了各个功能按钮的点击事件处理逻辑。具体功能包括个人信息、用户管理、账号安全、浏览记录、我的订单等。同时根据用户是否为管理员,动态显示或隐藏相应的功能按钮。点击联系客服时会显示一个 Toast 提示,点击退出登录时会清除用户数据并跳转到登录界面。 

package com.example.fruit.ui.fragment;

import android.app.Activity;
import android.app.Fragment;
import android.content.Context;
import android.content.Intent;
import android.net.Uri;
import android.os.Bundle;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.Button;
import android.widget.LinearLayout;
import android.widget.Toast;

import com.example.fruit.bean.Browse;
import com.example.fruit.ui.activity.BrowseActivity;
import com.example.fruit.ui.activity.ManageActivity;
import com.example.fruit.MyApplication;
import com.example.fruit.ui.activity.OrderActivity;
import com.example.fruit.R;
import com.example.fruit.ui.activity.LoginActivity;
import com.example.fruit.ui.activity.PasswordActivity;
import com.example.fruit.ui.activity.PersonActivity;
import com.example.fruit.util.SPUtils;

/**
 * 个人中心
 */
public class UserFragment extends Fragment {
    private Activity mActivity;
    private LinearLayout llPerson;
    private LinearLayout llSecurity;

    private LinearLayout llFavorite;
    private LinearLayout llBrowse;
    private LinearLayout order;
    private LinearLayout manage;
    private Button btnLogout;
    @Override
    public void onAttach(Context context) {
        super.onAttach(context);
        mActivity = (Activity) context;
    }

    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
        View view = inflater.inflate(R.layout.fragment_user,container,false);
        llPerson = view.findViewById(R.id.person);
        llSecurity = view.findViewById(R.id.security);
        llBrowse = view.findViewById(R.id.browse);
        order = view.findViewById(R.id.order);
        manage = view.findViewById(R.id.manage);
        btnLogout = view.findViewById(R.id.logout);
        llFavorite = view.findViewById(R.id.favorite);
        initView();
        return view;
    }

    private void initView() {
        Boolean isAdmin = (Boolean) SPUtils.get(mActivity,SPUtils.IS_ADMIN,false);

        llFavorite.setVisibility(isAdmin?View.GONE:View.VISIBLE);
        order.setVisibility(isAdmin?View.GONE:View.VISIBLE);
        llBrowse.setVisibility(isAdmin?View.GONE:View.VISIBLE);
        manage.setVisibility(isAdmin?View.VISIBLE:View.GONE);
        //个人信息
        llPerson.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                //跳转页面
                Intent intent = new Intent(mActivity, PersonActivity.class);
                startActivity(intent);
            }
        });
        //用户管理
        manage.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                //跳转页面
                Intent intent = new Intent(mActivity, ManageActivity.class);
                startActivity(intent);
            }
        });
        //账号安全
        llSecurity.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                //跳转页面
                Intent intent = new Intent(mActivity, PasswordActivity.class);
                startActivity(intent);
            }
        });
        //浏览记录
        llBrowse.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                //跳转页面
                Intent intent = new Intent(mActivity, BrowseActivity.class);
                startActivity(intent);
            }
        });

        //我的订单
        order.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                //跳转页面
                Intent intent = new Intent(mActivity, OrderActivity.class);
                startActivity(intent);
            }
        });
        //联系客服
        llFavorite.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                //跳转页面
                //跳转到我的资料卡
                Toast.makeText(mActivity, "请联系QQ:123", Toast.LENGTH_SHORT).show();
            }
        });
        //退出登录
        btnLogout.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                MyApplication.Instance.getMainActivity().finish();
                SPUtils.remove(mActivity,SPUtils.IS_ADMIN);
                SPUtils.remove(mActivity,SPUtils.ACCOUNT);
                startActivity(new Intent(mActivity, LoginActivity.class));
            }
        });
    }
}

Get 项目模板源码

👇👇👇快捷获取方式👇👇👇

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

编程乐学

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值