系统软件介绍
该软件是一款购买美食的app,名字叫做Cateapp,主要面向于大众群体。
具有用户注册账号和登录功能,没有登录的用户只能查看app上的展示内容,不能对食物商品进行下单
。用户登录之后可以进行对食物商品下单,下单之后可以查看下单记录。如果用户对商品有什么问页在app里边联系客服。
系统实现方案
主要使用Fragment+ViewPager2技术实现主页面的左右滑动屏幕翻页效果;
实现点击底部4个导航选项切换或加载对应的页面;实现点击底部4个选项同时导航颜色做相应变化。
然后通过RecyclerView控件,实现一些列表图片的展示及刷新。通过Intent 启动组件,在组件之间传递信息和页面转换。
通过SQLite数据库存储用户的下单信息,和通过SharedPreferences来保存注册的账号信息
。使用多线程来实现一些图片的异步刷新和启动页的停留。
源码下载:https://download.csdn.net/download/qq_44716544/17860514
或者私聊我拿
桌面图标
代码目录
图片展示:
第二个页面,登录页,注册页
主页面:
联系客服
关键代码
启动页:
pActivity.this.runOnUiThread(new Runnable() { //调用主线程
@Override
public void run() {
t.setText(s[n]); //刷新代码
n++;
}
});
try {
Thread.sleep(1000); //暂停100毫秒
if(n==3){
Intent it=new Intent(StartupActivity.this,LoginActivity.class);
startActivity(it);
finish();
}
} catch (Exception e) {
}
}
}
}).start();
第二个页面,登录页
if(s.equals("")||s2.equals("")) {
Toast.makeText(LoginActivity.this,"账号或密码不能为空",Toast.LENGTH_SHORT).show();
}
if(s.equals(account)&&s2.equals(password)){
// Toast.makeText(LoginActivity.this,"登录成功",Toast.LENGTH_SHORT).show();
Intent i=new Intent();
i.setClass(LoginActivity.this,MainActivity.class);//设置跳转的界面
i.putExtra("account",s);
i.putExtra("state","已登录");
startActivity(i);
finish();
}
if(!s.equals(account)||!s2.equals(password)){
Toast.makeText(LoginActivity.this,"账号或密码不正确",Toast.LENGTH_SHORT).show();
}
主页面
final List
list.add(new NewFragment());
list.add(new ProducstFragment());
list.add(new SettlementFragment());
list.add(new UserFragment());
vp=findViewById(R.id.viewPager); //获得ViewPager2控件
//设置预加载的Fragment页面数量,可防止流式布局StaggeredGrid数组越界错误。
vp.setOffscreenPageLimit(list.size() - 1); //设置适配器
FragmentStateAdapter adapter=new FragmentStateAdapter(MainActivity.this) {
@NonNull
@Override
public Fragment createFragment(int position) {
return list.get(position);
}
@Override
public int getItemCount() {
return list.size();
}
};
vp.setAdapter(adapter); //把适配器添加给ViewPager2
}
new Thread(new Runnable() {
@Override
public void run() {
activity.runOnUiThread(new Runnable() {
@Override
public void run() {
if((image.length!=0)&&(text.length!=0)){
holder.iv.setImageResource(image[position]);
holder.tv.setText(text[position]);
}
}
});
}
}).start();
holder.tv.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
String s= holder.tv.getText().toString();//获取被点击的文字
Intent i=new Intent();
i.setClass(activity, NewActivity.class);//设置跳转的界面
i.putExtra("name",s);
// Toast.makeText(activity,s,Toast.LENGTH_SHORT).show();
activity.startActivity(i);
//点击左列表选项,加载对应右列表数据。
// ProducstFragment.rightrv.setAdapter(new ProductRightAdapter(activity, ProducstFragment.list.get(position)));
}
});
holder.iv.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
String s= holder.tv.getText().toString();//获取被点击的文字
Intent i=new Intent();
i.setClass(activity, NewActivity.class);//设置跳转的界面
i.putExtra("name",s);
// Toast.makeText(activity,s,Toast.LENGTH_SHORT).show();
activity.startActivity(i);
//点击左列表选项,加载对应右列表数据。
// ProducstFragment.rightrv.setAdapter(new ProductRightAdapter(activity, ProducstFragment.list.get(position)));
}
});
new Thread(new Runnable() {
@Override
public void run() {
activity.runOnUiThread(new Runnable() {
@Override
public void run() {
if((list.size()!=0)){
holder.iv.setImageResource(product.getImage());
holder.nametv.setText(product.getName());
holder.pricetv.setText(" "+product.getPrice());
}
}
});
}
}).start();
//点击选项里的添加按钮要执行的操作
holder.bt.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
//如果已选的小吃数据集合里没有该小吃
if(!app.selectedproduct.contains(list.get(position))){
product.setNumber(1); //设置数量
app.selectedproduct.add(product); //添加当前选项数据到集合
//添加当前选项价格到总价
app.countprice +=Double.parseDouble(product.getPrice());
Toast.makeText(activity,"添加成功",Toast.LENGTH_SHORT).show();
}else{ //如果已选的小吃数据集合里已有该小吃
Toast.makeText(activity,"已经有了",Toast.LENGTH_SHORT).show();
}
}
});
新品页面
Intent intent=getIntent();
String name=intent.getStringExtra("name");//获取菜名
for(int i=0;i if(text[i].equals(name)){ position=i; break; } } // Toast.makeText(NewActivity.this,text.length,Toast.LENGTH_SHORT).show(); ImageView foodimage=findViewById(R.id.foodimage); foodimage.setImageResource(image[position]);//设置食物图片 TextView foodid=findViewById(R.id.foodid); foodid.setText(text[position]); foodname=findViewById(R.id.foodname); foodname.setText(text2[position]); } Button buttonorder=findViewById(R.id.buttonorder); buttonorder.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View view) { app = (AppData) NewActivity.this.getApplication(); //获得全局类 if (app.check.equals("已登录")) { if (num >= 1) { String pricesum2 = Integer.toString(pricesum); //获取菜名,价格,数量,并添加的集合里。 Product product = new Product(); product.setImage(image[position]); product.setName(text[position]); product.setPrice(pricesum2); product.setNumber(num); app.countprice = pricesum; app.selectedproduct.add(product); //添加当前选项数据到集合 Toast.makeText(NewActivity.this, "下单成功", Toast.LENGTH_SHORT).show(); // save(); } else { Toast.makeText(NewActivity.this, "你还没有选择数量", Toast.LENGTH_SHORT).show(); } } else { Toast.makeText(NewActivity.this, "你还没有登录,请先登录", Toast.LENGTH_SHORT).show(); } } }); 购买记录页面 app = (AppData) RecordActivity.this.getApplication(); //获得全局类 // Toast.makeText(RecordActivity.this, app.account+"message", Toast.LENGTH_SHORT).show(); MyHelper helper=new MyHelper(RecordActivity.this,app.account+".db",null,1); SQLiteDatabase db=helper.getReadableDatabase(); Cursor cursor=db.query("information",null,null,null,null,null,null); if(cursor.getCount()!=0){ while (cursor.moveToNext()){ String _id = cursor.getString(cursor.getColumnIndex("_id")); String image = cursor.getString(cursor.getColumnIndex("image")); String name = cursor.getString(cursor.getColumnIndex("name")); String price = cursor.getString(cursor.getColumnIndex("price")); String time1 = cursor.getString(cursor.getColumnIndex("time1")); name2[num]=name; image2[num]=image; price2[num]=price; time2[num]=time1; num++; // Toast.makeText(RecordActivity.this, app.account+"message"+message[0], Toast.LENGTH_SHORT).show(); } cursor.close(); } 联系客服页面 * 判断是否有某项权限 * @param string_permission 权限 * @param request_code 请求码 * @return */ public boolean checkReadPermission(String string_permission,int request_code) { boolean flag = false; if (ContextCompat.checkSelfPermission(getActivity(), string_permission) == PackageManager.PERMISSION_GRANTED) {//已有权限 flag = true; } else {//申请权限 ActivityCompat.requestPermissions(getActivity(), new String[]{string_permission}, request_code); } return flag; } /** * 检查权限后的回调 * @param requestCode 请求码 * @param permissions 权限 * @param grantResults 结果 */ @Override public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) { switch (requestCode) { case REQUEST_CALL_PERMISSION: //拨打电话 if (permissions.length != 0 && grantResults[0] != PackageManager.PERMISSION_GRANTED) {//失败 Toast.makeText(getActivity(),"请允许拨号权限后再试",Toast.LENGTH_SHORT).show(); } else {//成功 call("tel:"+"10086"); } break; } } /** * 拨打电话(直接拨打) * @param telPhone 电话 */ public void call(String telPhone){ if(checkReadPermission(Manifest.permission.CALL_PHONE,REQUEST_CALL_PERMISSION)){ Intent intent = new Intent(Intent.ACTION_CALL, Uri.parse(telPhone)); startActivity(intent); } } }