目录
一、项目测试视频
网络资源模板--基于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 用户管理;用户信息增删改查;
三、项目测试环境
四、项目详情设计
1.所有页面效果图
这个代码是一个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>
这段代码是一个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);
}
});
}
}
这段代码是一个名为 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 项目模板源码
👇👇👇快捷获取方式👇👇👇