当前位置:   article > 正文

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

android 水果商城

目录

 一、项目测试视频

二、项目简介

三、项目测试环境

四、项目详情设计

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

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

  1. <?xml version="1.0" encoding="utf-8"?>
  2. <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
  3. android:orientation="vertical" android:layout_width="match_parent"
  4. android:layout_height="match_parent"
  5. android:background="@color/colorWhite">
  6. <!--标题栏-->
  7. <LinearLayout
  8. android:layout_width="match_parent"
  9. android:layout_height="wrap_content"
  10. android:background="@drawable/bg_border_bottom">
  11. <com.example.fruit.widget.ActionBar
  12. android:id="@+id/myActionBar"
  13. android:layout_width="match_parent"
  14. android:layout_height="wrap_content"/>
  15. </LinearLayout>
  16. <ImageView
  17. android:layout_gravity="center"
  18. android:layout_width="match_parent"
  19. android:layout_height="100dp"
  20. android:layout_marginTop="0dp"
  21. android:layout_marginBottom="10dp"
  22. android:src="@drawable/a1" />
  23. <!--表单布局-->
  24. <ScrollView
  25. android:layout_width="match_parent"
  26. android:layout_height="wrap_content">
  27. <LinearLayout
  28. android:layout_width="match_parent"
  29. android:layout_height="wrap_content"
  30. android:paddingLeft="20dp"
  31. android:paddingRight="20dp"
  32. android:orientation="vertical">
  33. <!--账号-->
  34. <LinearLayout
  35. android:layout_width="match_parent"
  36. android:layout_height="wrap_content"
  37. android:background="@drawable/bg_border_bottom"
  38. android:paddingTop="15dp"
  39. android:paddingBottom="15dp"
  40. android:orientation="horizontal">
  41. <!--TextView 文本 html的p标签-->
  42. <TextView
  43. android:layout_width="70dp"
  44. android:layout_height="wrap_content"
  45. android:gravity="start"
  46. android:text="标题:"
  47. android:textColor="#000000"
  48. android:textSize="14dp" />
  49. <EditText
  50. android:id="@+id/title"
  51. android:layout_width="0dp"
  52. android:layout_height="wrap_content"
  53. android:layout_weight="2"
  54. android:background="@null"
  55. android:textSize="14dp"
  56. android:singleLine="true"
  57. android:hint="请输入标题" />
  58. </LinearLayout>
  59. <LinearLayout
  60. android:layout_width="match_parent"
  61. android:layout_height="wrap_content"
  62. android:orientation="horizontal">
  63. <LinearLayout
  64. android:layout_width="0dp"
  65. android:layout_height="wrap_content"
  66. android:layout_weight="1"
  67. android:background="@drawable/bg_border_bottom"
  68. android:paddingTop="15dp"
  69. android:paddingBottom="15dp"
  70. android:orientation="horizontal">
  71. <!--TextView 文本 html的p标签-->
  72. <TextView
  73. android:layout_width="70dp"
  74. android:layout_height="wrap_content"
  75. android:gravity="start"
  76. android:text="图片:"
  77. android:textColor="#000000"
  78. android:textSize="14dp" />
  79. <EditText
  80. android:id="@+id/img"
  81. android:layout_width="0dp"
  82. android:layout_height="wrap_content"
  83. android:layout_weight="2"
  84. android:background="@null"
  85. android:textSize="14dp"
  86. android:singleLine="true"
  87. android:hint="请输入图片地址" />
  88. </LinearLayout>
  89. <ImageView
  90. android:id="@+id/iv_img"
  91. android:layout_width="50dp"
  92. android:layout_height="match_parent"
  93. android:layout_marginLeft="10dp"/>
  94. </LinearLayout>
  95. <LinearLayout
  96. android:layout_width="match_parent"
  97. android:layout_height="wrap_content"
  98. android:background="@drawable/bg_border_bottom"
  99. android:paddingTop="15dp"
  100. android:paddingBottom="15dp"
  101. android:orientation="horizontal">
  102. <!--TextView 文本 html的p标签-->
  103. <TextView
  104. android:layout_width="70dp"
  105. android:layout_height="wrap_content"
  106. android:gravity="start"
  107. android:text="类型:"
  108. android:textColor="#000000"
  109. android:textSize="14dp" />
  110. <Spinner
  111. android:id="@+id/type"
  112. android:layout_width="match_parent"
  113. android:layout_height="wrap_content"
  114. android:entries="@array/type"/>
  115. </LinearLayout>
  116. <LinearLayout
  117. android:layout_width="match_parent"
  118. android:layout_height="wrap_content"
  119. android:background="@drawable/bg_border_bottom"
  120. android:paddingTop="15dp"
  121. android:paddingBottom="15dp"
  122. android:orientation="horizontal">
  123. <!--TextView 文本 html的p标签-->
  124. <TextView
  125. android:layout_width="70dp"
  126. android:layout_height="wrap_content"
  127. android:gravity="start"
  128. android:text="价格:"
  129. android:textColor="#000000"
  130. android:textSize="14dp" />
  131. <EditText
  132. android:id="@+id/issuer"
  133. android:layout_width="0dp"
  134. android:layout_height="wrap_content"
  135. android:layout_weight="2"
  136. android:background="@null"
  137. android:textSize="14dp"
  138. android:singleLine="true"
  139. android:hint="请输入价格" />
  140. </LinearLayout>
  141. <!--描述-->
  142. <LinearLayout
  143. android:layout_width="match_parent"
  144. android:layout_height="match_parent"
  145. android:background="@drawable/bg_border_bottom"
  146. android:paddingTop="15dp"
  147. android:orientation="vertical">
  148. <!--TextView 文本 html的p标签-->
  149. <TextView
  150. android:layout_width="70dp"
  151. android:layout_height="wrap_content"
  152. android:gravity="start"
  153. android:textColor="#000000"
  154. android:text="商品描述:"
  155. android:textSize="14dp" />
  156. <EditText
  157. android:id="@+id/content"
  158. android:layout_width="match_parent"
  159. android:layout_marginTop="10dp"
  160. android:padding="10dp"
  161. android:layout_height="match_parent"
  162. android:background="@drawable/bg_border_bottom"
  163. android:textSize="14dp"
  164. android:hint="请输入商品信息" />
  165. </LinearLayout>
  166. <!--注册按钮-->
  167. <Button
  168. android:onClick="save"
  169. android:layout_width="match_parent"
  170. android:layout_height="wrap_content"
  171. android:layout_marginTop="50dp"
  172. android:background="@drawable/btn_border_fill"
  173. android:textColor="@color/colorWhite"
  174. android:layout_marginBottom="20dp"
  175. android:textSize="22dp"
  176. android:textAllCaps="false"
  177. android:text="保存"/>
  178. </LinearLayout>
  179. </ScrollView>
  180. </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提示消息。

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

  1. package com.example.fruit.ui.activity;
  2. import android.app.Activity;
  3. import android.os.Bundle;
  4. import android.view.View;
  5. import android.widget.Button;
  6. import android.widget.ImageView;
  7. import android.widget.TextView;
  8. import android.widget.Toast;
  9. import androidx.annotation.Nullable;
  10. import androidx.appcompat.app.AppCompatActivity;
  11. import com.bumptech.glide.Glide;
  12. import com.bumptech.glide.load.engine.DiskCacheStrategy;
  13. import com.example.fruit.R;
  14. import com.example.fruit.bean.Browse;
  15. import com.example.fruit.bean.Car;
  16. import com.example.fruit.bean.Fruit;
  17. import com.example.fruit.util.SPUtils;
  18. import com.example.fruit.widget.ActionBar;
  19. import org.litepal.crud.DataSupport;
  20. import java.text.SimpleDateFormat;
  21. import java.util.Date;
  22. /**
  23. * 水果明细信息
  24. */
  25. public class FruitDetailActivity extends AppCompatActivity {
  26. private Activity mActivity;
  27. private ImageView ivImg;
  28. private TextView tvTitle;
  29. private TextView tvDate;
  30. private TextView tvContent;
  31. private TextView tvIssuer;
  32. private Button btnCollect;
  33. private Button btnCancel;
  34. private ActionBar mActionBar;//标题栏
  35. private SimpleDateFormat sf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
  36. @Override
  37. protected void onCreate(@Nullable Bundle savedInstanceState) {
  38. super.onCreate(savedInstanceState);
  39. mActivity = this;
  40. setContentView(R.layout.activity_fruit_detail);
  41. ivImg = findViewById(R.id.img);
  42. tvTitle= findViewById(R.id.title);
  43. tvDate = findViewById(R.id.date);
  44. tvContent = findViewById(R.id.content);
  45. tvIssuer = findViewById(R.id.issuer);
  46. btnCollect = findViewById(R.id.btn_collect);
  47. btnCancel = findViewById(R.id.btn_cancel);
  48. mActionBar = findViewById(R.id.myActionBar);
  49. //侧滑菜单
  50. mActionBar.setData(mActivity,"商品详情", R.drawable.ic_back, 0, 0, getResources().getColor(R.color.colorPrimary), new ActionBar.ActionBarClickListener() {
  51. @Override
  52. public void onLeftClick() {
  53. finish();
  54. }
  55. @Override
  56. public void onRightClick() {
  57. }
  58. });
  59. Fruit fruit = (Fruit) getIntent().getSerializableExtra("fruit");
  60. tvTitle.setText(fruit.getTitle());
  61. tvDate.setText(String.format("上架时间:%s",fruit.getDate()));
  62. tvContent.setText(fruit.getContent());
  63. tvIssuer.setText(String.format("¥ %s",fruit.getIssuer()));
  64. Glide.with(mActivity)
  65. .asBitmap()
  66. .skipMemoryCache(true)
  67. .load(fruit.getImg())
  68. .diskCacheStrategy(DiskCacheStrategy.NONE)
  69. .into(ivImg);
  70. String account = (String) SPUtils.get(mActivity,SPUtils.ACCOUNT,"");
  71. //浏览记录
  72. Browse browse = DataSupport.where("account = ? and title = ?",account,fruit.getTitle()).findFirst(Browse.class);//浏览记录
  73. if (browse == null) {//不存在该条浏览记录 新增记录
  74. Browse browse1 = new Browse(account,fruit.getTitle());
  75. browse1.save();
  76. }
  77. Boolean isAdmin = (Boolean) SPUtils.get(mActivity,SPUtils.IS_ADMIN,false);
  78. if (!isAdmin){
  79. Car order = DataSupport.where("account = ? and title = ?",account,fruit.getTitle()).findFirst(Car.class);
  80. btnCollect.setVisibility(order!=null?View.GONE:View.VISIBLE);
  81. btnCancel.setVisibility(order!=null?View.VISIBLE:View.GONE);
  82. }
  83. //收藏
  84. btnCollect.setOnClickListener(new View.OnClickListener() {
  85. @Override
  86. public void onClick(View v) {
  87. Car car = new Car(fruit.getIssuer(),account,fruit.getTitle(),"S"+System.currentTimeMillis(),account,sf.format(new Date()));
  88. car.save();
  89. Toast.makeText(mActivity,"加入购物车成功", Toast.LENGTH_SHORT).show();
  90. btnCollect.setVisibility(View.GONE);
  91. btnCancel.setVisibility(View.VISIBLE);
  92. }
  93. });
  94. //取消收藏
  95. btnCancel.setOnClickListener(new View.OnClickListener() {
  96. @Override
  97. public void onClick(View v) {
  98. Car order = DataSupport.where("account = ? and title = ?",account,fruit.getTitle()).findFirst(Car.class);
  99. order.delete();
  100. Toast.makeText(mActivity,"已从购物车移除", Toast.LENGTH_SHORT).show();
  101. btnCollect.setVisibility(View.VISIBLE);
  102. btnCancel.setVisibility(View.GONE);
  103. }
  104. });
  105. }
  106. }

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

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

  1. package com.example.fruit.ui.fragment;
  2. import android.app.Activity;
  3. import android.app.Fragment;
  4. import android.content.Context;
  5. import android.content.Intent;
  6. import android.net.Uri;
  7. import android.os.Bundle;
  8. import android.view.LayoutInflater;
  9. import android.view.View;
  10. import android.view.ViewGroup;
  11. import android.widget.Button;
  12. import android.widget.LinearLayout;
  13. import android.widget.Toast;
  14. import com.example.fruit.bean.Browse;
  15. import com.example.fruit.ui.activity.BrowseActivity;
  16. import com.example.fruit.ui.activity.ManageActivity;
  17. import com.example.fruit.MyApplication;
  18. import com.example.fruit.ui.activity.OrderActivity;
  19. import com.example.fruit.R;
  20. import com.example.fruit.ui.activity.LoginActivity;
  21. import com.example.fruit.ui.activity.PasswordActivity;
  22. import com.example.fruit.ui.activity.PersonActivity;
  23. import com.example.fruit.util.SPUtils;
  24. /**
  25. * 个人中心
  26. */
  27. public class UserFragment extends Fragment {
  28. private Activity mActivity;
  29. private LinearLayout llPerson;
  30. private LinearLayout llSecurity;
  31. private LinearLayout llFavorite;
  32. private LinearLayout llBrowse;
  33. private LinearLayout order;
  34. private LinearLayout manage;
  35. private Button btnLogout;
  36. @Override
  37. public void onAttach(Context context) {
  38. super.onAttach(context);
  39. mActivity = (Activity) context;
  40. }
  41. @Override
  42. public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
  43. View view = inflater.inflate(R.layout.fragment_user,container,false);
  44. llPerson = view.findViewById(R.id.person);
  45. llSecurity = view.findViewById(R.id.security);
  46. llBrowse = view.findViewById(R.id.browse);
  47. order = view.findViewById(R.id.order);
  48. manage = view.findViewById(R.id.manage);
  49. btnLogout = view.findViewById(R.id.logout);
  50. llFavorite = view.findViewById(R.id.favorite);
  51. initView();
  52. return view;
  53. }
  54. private void initView() {
  55. Boolean isAdmin = (Boolean) SPUtils.get(mActivity,SPUtils.IS_ADMIN,false);
  56. llFavorite.setVisibility(isAdmin?View.GONE:View.VISIBLE);
  57. order.setVisibility(isAdmin?View.GONE:View.VISIBLE);
  58. llBrowse.setVisibility(isAdmin?View.GONE:View.VISIBLE);
  59. manage.setVisibility(isAdmin?View.VISIBLE:View.GONE);
  60. //个人信息
  61. llPerson.setOnClickListener(new View.OnClickListener() {
  62. @Override
  63. public void onClick(View v) {
  64. //跳转页面
  65. Intent intent = new Intent(mActivity, PersonActivity.class);
  66. startActivity(intent);
  67. }
  68. });
  69. //用户管理
  70. manage.setOnClickListener(new View.OnClickListener() {
  71. @Override
  72. public void onClick(View v) {
  73. //跳转页面
  74. Intent intent = new Intent(mActivity, ManageActivity.class);
  75. startActivity(intent);
  76. }
  77. });
  78. //账号安全
  79. llSecurity.setOnClickListener(new View.OnClickListener() {
  80. @Override
  81. public void onClick(View v) {
  82. //跳转页面
  83. Intent intent = new Intent(mActivity, PasswordActivity.class);
  84. startActivity(intent);
  85. }
  86. });
  87. //浏览记录
  88. llBrowse.setOnClickListener(new View.OnClickListener() {
  89. @Override
  90. public void onClick(View v) {
  91. //跳转页面
  92. Intent intent = new Intent(mActivity, BrowseActivity.class);
  93. startActivity(intent);
  94. }
  95. });
  96. //我的订单
  97. order.setOnClickListener(new View.OnClickListener() {
  98. @Override
  99. public void onClick(View v) {
  100. //跳转页面
  101. Intent intent = new Intent(mActivity, OrderActivity.class);
  102. startActivity(intent);
  103. }
  104. });
  105. //联系客服
  106. llFavorite.setOnClickListener(new View.OnClickListener() {
  107. @Override
  108. public void onClick(View v) {
  109. //跳转页面
  110. //跳转到我的资料卡
  111. Toast.makeText(mActivity, "请联系QQ:123", Toast.LENGTH_SHORT).show();
  112. }
  113. });
  114. //退出登录
  115. btnLogout.setOnClickListener(new View.OnClickListener() {
  116. @Override
  117. public void onClick(View v) {
  118. MyApplication.Instance.getMainActivity().finish();
  119. SPUtils.remove(mActivity,SPUtils.IS_ADMIN);
  120. SPUtils.remove(mActivity,SPUtils.ACCOUNT);
  121. startActivity(new Intent(mActivity, LoginActivity.class));
  122. }
  123. });
  124. }
  125. }

Get 项目模板源码

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/小惠珠哦/article/detail/968841
推荐阅读
相关标签