网络资源模板--Android Studio 外卖点餐App

目录

一、项目演示

二、项目测试环境

三、项目详情

四、完整的项目源码 


原创外卖点餐:基于Android studio 实现外卖(点)订餐系统

非原创奶茶点餐:网络资源模板--基于 Android Studio 实现的奶茶点餐App+报告

一、项目演示

网络资源模板--基于Android studio 外卖订餐App 

二、项目测试环境

三、项目详情

1.启动页

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:app="http://schemas.android.com/apk/res-auto"xmlns:tools="http://schemas.android.com/tools"android:layout_width="match_parent"android:layout_height="match_parent"android:orientation="vertical"xmlns:android="http://schemas.android.com/apk/res/android"android:background="@drawable/bg_welcome"><ImageViewandroid:layout_width="200dp"android:layout_height="200dp"android:layout_marginTop="130dp"android:src="@drawable/icon"android:layout_gravity="center"/></LinearLayout>

2.登录页

 `LoginActivity` 是一个用户登录界面,允许用户输入账号和密码进行登录验证。如果账号不存在,则显示相应提示;如果密码错误,则提示重新输入;如果验证通过,则跳转到主界面 `MainActivity`。用户也可以点击注册按钮 `tvRegister` 跳转到注册界面 `RegisterActivity` 进行新账号注册。

package com.example.ordersystem.Activity;import android.content.Intent;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
import android.widget.TextView;
import android.widget.Toast;import androidx.appcompat.app.ActionBar;
import androidx.appcompat.app.AppCompatActivity;import com.example.ordersystem.DataBase.UserDao;
import com.example.ordersystem.R;public class LoginActivity extends AppCompatActivity {private static final int RESULT_OK = 1;private Button btnLogin;private EditText etAccount;private EditText etPassword;private TextView tvRegister;private UserDao userDao;@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_login);initView();}public void initView() {// 绑定控件btnLogin = findViewById(R.id.btn_login);tvRegister = findViewById(R.id.tv_register);etAccount = findViewById(R.id.et_account);etPassword = findViewById(R.id.et_password);// 匿名内部类方式实现按钮点击事件btnLogin.setOnClickListener(new View.OnClickListener() {@Overridepublic void onClick(View v) {String acc = etAccount.getText().toString().trim();String pass = etPassword.getText().toString().trim();userDao = new UserDao(getApplicationContext());userDao.open();if (!userDao.isExist(acc)) {Toast.makeText(LoginActivity.this,"账号不存在,请重新输入!", Toast.LENGTH_SHORT).show();} else {if (userDao.getPassword(acc).equals(pass)) {Intent intent = new Intent(LoginActivity.this, MainActivity.class);// 创建意图对象,进行跳转startActivity(intent);// 销毁该活动finish();} else {Toast.makeText(LoginActivity.this, "密码错误,请重新输入!", Toast.LENGTH_SHORT).show();}}// 关闭DB访问对象userDao.close();}});tvRegister.setOnClickListener(new View.OnClickListener() {@Overridepublic void onClick(View v) {Intent intent = new Intent(LoginActivity.this, RegisterActivity.class);startActivityForResult(intent,1);}});}@Overrideprotected void onActivityResult(int requestCode, int resultCode, Intent data) {super.onActivityResult(requestCode, resultCode, data);switch (requestCode) {case 1:if (resultCode == RESULT_OK) {String acc = data.getStringExtra("acc");String pass = data.getStringExtra("pass");etAccount.setText(acc);etPassword.setText(pass);}break;default:break;}}
}

3.注册页

该代码实现了一个Android注册功能,用户可以输入账号、密码和确认密码进行注册,包括验证账号是否已存在、密码不能为空以及确认密码是否一致,并将注册信息存储到数据库中。

package com.example.ordersystem.Activity;import android.content.Intent;
import android.os.Bundle;
import android.text.TextUtils;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
import android.widget.Toast;import androidx.appcompat.app.ActionBar;
import androidx.appcompat.app.AppCompatActivity;import com.example.ordersystem.Bean.User;
import com.example.ordersystem.DataBase.UserDao;
import com.example.ordersystem.R;public class RegisterActivity extends AppCompatActivity {private static final int RESULT_OK = 1;private Button btnRegister;private Button btnCancel;private EditText etAccount;private EditText etPassword;private EditText etConfirmPassword;private UserDao userDao;@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_register);initView();}public void initView() {// 绑定控件etAccount =findViewById(R.id.et_account);etPassword = findViewById(R.id.et_password);etConfirmPassword = findViewById(R.id.et_confirm_password);btnRegister = findViewById(R.id.btn_register);btnCancel = findViewById(R.id.btn_cancel);// 设置点击事件btnRegister.setOnClickListener(new View.OnClickListener() {@Overridepublic void onClick(View v) {String acc = etAccount.getText().toString().trim();String pass = etPassword.getText().toString().trim();String confirm = etConfirmPassword.getText().toString().trim();User user = new User(acc, pass);userDao = new UserDao(getApplicationContext());userDao.open();if (userDao.findUser(user)) {Toast.makeText(RegisterActivity.this, "账号已存在", Toast.LENGTH_SHORT).show();} else if (TextUtils.isEmpty(pass) || TextUtils.isEmpty(confirm)) {Toast.makeText(RegisterActivity.this, "密码不能为空", Toast.LENGTH_SHORT).show();} else if(!pass.equals(confirm)) {Toast.makeText(RegisterActivity.this, "两次输入的密码不同", Toast.LENGTH_SHORT).show();} else {userDao.addUser(user);Toast.makeText(RegisterActivity.this, "注册成功!", Toast.LENGTH_SHORT).show();Intent intent = new Intent(RegisterActivity.this, LoginActivity.class);//将账号和密码传递过去intent.putExtra("acc", acc);intent.putExtra("pass", pass);setResult(RESULT_OK, intent);finish();}userDao.close();}});btnCancel.setOnClickListener(new View.OnClickListener() {@Overridepublic void onClick(View v) {finish();}});}
}

4.首页

 这段代码实现了一个首页(HomeFragment)的功能,包括展示美食列表、下拉刷新功能和随机展示美食。美食数据由固定的 `Food` 对象数组提供,通过 `RecyclerView` 和 `FoodAdapter` 实现列表展示,同时支持下拉刷新功能,刷新时随机重新排列展示的美食列表。

package com.example.ordersystem.Fragment;import android.os.Bundle;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;import androidx.fragment.app.Fragment;
import androidx.recyclerview.widget.GridLayoutManager;
import androidx.recyclerview.widget.RecyclerView;
import androidx.swiperefreshlayout.widget.SwipeRefreshLayout;import java.util.ArrayList;
import java.util.List;
import java.util.Random;import com.example.ordersystem.Bean.Food;
import com.example.ordersystem.Adapter.FoodAdapter;
import com.example.ordersystem.R;public class HomeFragment extends Fragment {private Food[] foods = {new Food("口水鸡", R.drawable.p1, "19.9", "4.7", "味道很好,菜量很足,本地销售冠军"),new Food("满杯百香果", R.drawable.p2, "7.0", "4.5", "总计1699人收藏,近30日80人复购"),new Food("巴西烤肉披萨", R.drawable.p3, "29.8", "4.7", "精选品牌,热销掌柜,网红店"),new Food("龙门花甲", R.drawable.p4, "15.9", "4.6", "套餐很划算,干净又卫生"),new Food("美味炸鸡", R.drawable.p5, "21.8", "4.4", "近3小时11人下单"),new Food("煎饼果子", R.drawable.p6, "5.9", "4.8", "非常用心地在做美食"),new Food("黄焖鸡米饭", R.drawable.p7, "11.9", "4.9", "好吃,分量足,性价比高"),new Food("西施烤肉饭", R.drawable.p8, "18.8", "4.5", "爆款烤肉饭,全是回头客"),new Food("十三香龙虾", R.drawable.p9, "98.0", "4.9", "本店销量第3名,正宗13香"),new Food("招牌辣子鸡", R.drawable.p10, "24.9", "4.7", "辣子鸡中的高人气店铺"),new Food("招牌无骨炸鸡", R.drawable.p11, "21.9", "4.9", "本店回头客第一名,炸鸡品类优质商品"),new Food("红烧排骨饭", R.drawable.p12, "28.9", "4.6", "本地拌饭套餐热销第2名")};private List<Food> foodList = new ArrayList<>();private FoodAdapter foodAdapter;private SwipeRefreshLayout swipeRefresh;@Overridepublic View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {View view = inflater.inflate(R.layout.fragment_home, container, false);// 创建数据源initFoods();RecyclerView recyclerView = view.findViewById(R.id.recycler_view);GridLayoutManager gridLayoutManager = new GridLayoutManager(getContext(),2);recyclerView.setLayoutManager(gridLayoutManager);// 创建适配器,同时加载数据源foodAdapter = new FoodAdapter(foodList);// 设置适配器recyclerView.setAdapter(foodAdapter);swipeRefresh = view.findViewById(R.id.swipe_refresh);swipeRefresh.setColorSchemeResources(R.color.design_default_color_primary);swipeRefresh.setOnRefreshListener(new SwipeRefreshLayout.OnRefreshListener() {@Overridepublic void onRefresh() {refreshFoods();}});return view;}private void initFoods() {foodList.clear();Random random = new Random();int index = random.nextInt(foods.length);for (int i = index; i < foods.length; i++) {foodList.add(foods[i]);}for (int i = 0; i < index; i++) {foodList.add(foods[i]);}}private void refreshFoods() {new Thread(new Runnable() {@Overridepublic void run() {try {Thread.sleep(2000);} catch (InterruptedException e) {e.printStackTrace();}getActivity().runOnUiThread(new Runnable() {@Overridepublic void run() {initFoods();foodAdapter.notifyDataSetChanged();swipeRefresh.setRefreshing(false);}});}}).start();}}

5.购物车

这段代码实现了一个购物车页面(CartFragment),功能包括展示购物车列表、下拉刷新购物车、提交订单和清空购物车。购物车数据通过数据库(使用 `CartDao`)管理,包括从数据库加载购物车数据和提交订单后清空购物车。用户可以通过下拉刷新购物车内容,并通过对话框确认提交订单。

代码中还使用了 `Handler` 处理异步消息,用于更新购物车列表的显示。

package com.example.ordersystem.Fragment;import android.app.AlertDialog;
import android.content.DialogInterface;
import android.os.Bundle;
import android.os.Handler;
import android.os.Message;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.Toast;import androidx.fragment.app.Fragment;
import androidx.recyclerview.widget.GridLayoutManager;
import androidx.recyclerview.widget.RecyclerView;
import androidx.swiperefreshlayout.widget.SwipeRefreshLayout;import com.google.android.material.floatingactionbutton.FloatingActionButton;import java.util.ArrayList;
import java.util.List;import com.example.ordersystem.Adapter.CartAdapter;
import com.example.ordersystem.Bean.Cart;
import com.example.ordersystem.DataBase.CartDao;
import com.example.ordersystem.R;public class CartFragment extends Fragment{public static final int UPDATE_CART = 1;private List<Cart> cartList = new ArrayList<>();;private CartAdapter cartAdapter;private CartDao cartDao;private SwipeRefreshLayout swipeRefresh;@Overridepublic View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {initCart();// 当购物车为空时执行,否则跳过if (cartList.isEmpty()) {View view = inflater.inflate(R.layout.cart_empty, container, false);return view;}View view = inflater.inflate(R.layout.fragment_cart, container, false);// 获取控件实例RecyclerView recyclerView = view.findViewById(R.id.recycler_view);FloatingActionButton fab = view.findViewById(R.id.fab);swipeRefresh = view.findViewById(R.id.swipe_refresh);swipeRefresh.setColorSchemeResources(R.color.design_default_color_primary);// 设置布局管理器,一列显示GridLayoutManager layoutManager = new GridLayoutManager(getContext(), 1);recyclerView.setLayoutManager(layoutManager);// 创建适配器cartAdapter = new CartAdapter(cartList);// 设置适配器recyclerView.setAdapter(cartAdapter);// 下拉刷新,重新加载数据源swipeRefresh.setOnRefreshListener(new SwipeRefreshLayout.OnRefreshListener() {@Overridepublic void onRefresh() {refershCart();}});// 订单提交fab.setOnClickListener(new View.OnClickListener() {@Overridepublic void onClick(View view) {AlertDialog alertDialog = new AlertDialog.Builder(view.getContext()).setTitle("提示").setIcon(R.drawable.ic_order).setMessage("您确定要提交订单吗?").setPositiveButton("确定", new DialogInterface.OnClickListener() {@Overridepublic void onClick(DialogInterface dialogInterface, int i) {cartDao.openDB();cartDao.commitOrder();cartDao.clearCart();cartDao.closeDB();Toast.makeText(getContext(), "下单成功!请下拉刷新页面~", Toast.LENGTH_SHORT).show();}}).setNegativeButton("取消", new DialogInterface.OnClickListener() {@Overridepublic void onClick(DialogInterface dialogInterface, int i) {Toast.makeText(getContext(), "订单已取消", Toast.LENGTH_SHORT).show();}}).show();}});return view;}// 初始化数据源,从数据库中获取所有记录的List对象,然后遍历存到cartList中private void initCart() {cartList.clear();cartDao = new CartDao(getContext());cartDao.openDB();List<Cart> tempList = cartDao.getAllCart();cartDao.closeDB();for (int i = 0; i < tempList.size(); i++) {cartList.add(tempList.get(i));}}// 刷新购物车private void refershCart() {new Thread(new Runnable() {@Overridepublic void run() {try {Thread.sleep(2000);} catch (InterruptedException e) {e.printStackTrace();}getActivity().runOnUiThread(new Runnable() {@Overridepublic void run() {initCart();cartAdapter.notifyDataSetChanged();swipeRefresh.setRefreshing(false);Toast.makeText(getContext(), "刷新成功!", Toast.LENGTH_SHORT).show();}});}}).start();}// 多线程,异步消息机制private Handler handler = new Handler() {@Overridepublic void handleMessage(Message msg) {switch (msg.what) {case UPDATE_CART:cartAdapter.notifyDataSetChanged();break;default:break;}}};}

6.商品详情页

 该代码实现了一个食物详情页面,用户可以查看食物的名称、图片和详细描述,并能够将食物加入购物车。

package com.example.ordersystem.Activity;import androidx.appcompat.app.ActionBar;
import androidx.appcompat.app.AppCompatActivity;import android.content.Intent;
import android.os.Bundle;
import android.view.MenuItem;
import android.view.View;
import android.widget.ImageView;
import android.widget.TextView;
import android.widget.Toast;import androidx.appcompat.widget.Toolbar;import com.bumptech.glide.Glide;
import com.google.android.material.appbar.CollapsingToolbarLayout;
import com.google.android.material.floatingactionbutton.FloatingActionButton;import com.example.ordersystem.Bean.Food;
import com.example.ordersystem.DataBase.FoodDao;
import com.example.ordersystem.R;public class FoodActivity extends AppCompatActivity {public static final String FOOD_DATA = "food_data";private FloatingActionButton fab;private FoodDao foodDao;@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_food);initView();}private void initView() {foodDao = new FoodDao(this);Intent intent = getIntent();// 获取通过参数传递过来的序列化对象,向下转型为FoodFood food = (Food)intent.getSerializableExtra(FOOD_DATA);// 获取对象的属性String foodName = food.getName();int foodImageId = food.getImageId();String foodComment = food.getComment();// 获取工具栏、折叠栏等实例Toolbar toolbar = findViewById(R.id.toolbar);CollapsingToolbarLayout collapsingToolbar = findViewById(R.id.collapsing_toolbar);ImageView foodImageView = findViewById(R.id.food_image_view);TextView foodContentText = findViewById(R.id.food_content_text);fab = findViewById(R.id.fab);// 设置自定义工具栏setSupportActionBar(toolbar);ActionBar actionBar = getSupportActionBar();// 设置默认返回按钮if (actionBar != null) {actionBar.setDisplayHomeAsUpEnabled(true);}collapsingToolbar.setTitle(foodName);Glide.with(this).load(foodImageId).into(foodImageView);String foodContent = generateFoodContent(foodComment);foodContentText.setText(foodContent);fab.setOnClickListener(new View.OnClickListener(){@Overridepublic void onClick(View view) {foodDao.openDB();foodDao.addFood(food);Toast.makeText(FoodActivity.this, "成功将"+foodName+"加入购物车!", Toast.LENGTH_SHORT).show();foodDao.closeDB();}});}// 生成食物内容private String generateFoodContent(String foodComment) {StringBuilder stringBuilder = new StringBuilder();for (int i = 0; i < 100; i++) {stringBuilder.append(foodComment);}return stringBuilder.toString();}// 菜单栏返回按钮的点击事件@Overridepublic boolean onOptionsItemSelected(MenuItem item) {switch (item.getItemId()) {case android.R.id.home:finish();return true;}return super.onOptionsItemSelected(item);}
}

7.我的页面

这段代码实现了一个包含抽屉菜单的个人信息界面(PersonFragment),具体功能如下:

1. 在 `onCreateView()` 方法中,加载布局并初始化视图控件(如订单、个人信息、分享按钮和圆形头像),设置点击事件监听器。
2. `NavigationView` 设置了菜单项的选中监听器,用于关闭抽屉菜单。
3. `onClick()` 方法根据点击事件执行不同的操作:
   - 点击个人信息按钮 (`person`),显示提示信息并打开左侧抽屉菜单。
   - 点击历史订单按钮 (`order`),显示提示信息并跳转到订单活动 (`OrderActivity`)。
   - 点击分享按钮 (`share`),调用 `shareSoftware()` 方法分享软件信息。

总体来说,这段代码实现了个人信息页面的基本功能,包括按钮点击事件处理和抽屉菜单的使用。

package com.example.ordersystem.Fragment;import android.content.Intent;
import android.os.Bundle;
import android.view.LayoutInflater;
import android.view.MenuItem;
import android.view.View;
import android.view.ViewGroup;
import android.widget.TextView;
import android.widget.Toast;import androidx.core.view.GravityCompat;
import androidx.drawerlayout.widget.DrawerLayout;
import androidx.fragment.app.Fragment;import com.google.android.material.navigation.NavigationView;import de.hdodenhof.circleimageview.CircleImageView;
import com.example.ordersystem.Activity.OrderActivity;
import com.example.ordersystem.R;public class PersonFragment extends Fragment implements View.OnClickListener{private TextView order, person, share;private CircleImageView circleImage;private DrawerLayout drawerLayout;@Overridepublic View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {View view = inflater.inflate(R.layout.fragment_person, container, false);// 获取控件实例order = view.findViewById(R.id.order);person = view.findViewById(R.id.person);share = view.findViewById(R.id.share);circleImage = view.findViewById(R.id.circle_image);drawerLayout = view.findViewById(R.id.drawer_layout);NavigationView navigationView = view.findViewById(R.id.nav_view);navigationView.setCheckedItem(R.id.nav_call);// 设置监听器order.setOnClickListener(this);person.setOnClickListener(this);share.setOnClickListener(this);circleImage.setOnClickListener(this);// 菜单项选中事件的监听器navigationView.setNavigationItemSelectedListener(new NavigationView.OnNavigationItemSelectedListener() {@Overridepublic boolean onNavigationItemSelected(MenuItem item) {drawerLayout.closeDrawers();return true;}});return view;}// 分享这个软件到其他用户private void shareSoftware() {Intent intent = new Intent(Intent.ACTION_SEND);intent.setType("text/plain");String msg = "想随时查找美食吗?快来下载订餐系统吧!";intent.putExtra(Intent.EXTRA_TEXT,msg);startActivity(Intent.createChooser(intent,"分享到...."));}@Overridepublic void onClick(View view) {switch (view.getId()) {case R.id.person:Toast.makeText(getContext(), "你查看了个人信息", Toast.LENGTH_SHORT).show();drawerLayout.openDrawer(GravityCompat.START);break;case R.id.order:Toast.makeText(getContext(), "你查看了历史订单", Toast.LENGTH_SHORT).show();Intent intent = new Intent(getActivity(), OrderActivity.class);startActivity(intent);break;case R.id.share:shareSoftware();break;}}
}

8.我的订单页

这段代码实现了一个订单展示页面(OrderActivity),具体功能如下:

1. 在 `onCreate()` 方法中,设置布局并初始化视图,包括RecyclerView用于展示订单列表,SwipeRefreshLayout用于下拉刷新,以及自定义的Toolbar用于显示操作栏。
2. `initView()` 方法初始化了界面元素,设置了RecyclerView的布局管理器和适配器(OrderAdapter),并添加了下拉刷新的监听器。
3. `initOrder()` 方法从数据库获取订单数据,并初始化到 `orderList` 中。
4. `refreshOrder()` 方法通过新线程模拟耗时操作(2秒钟),然后更新订单数据,并通知适配器数据变化,同时关闭下拉刷新动画并显示刷新成功的提示。
5. `onOptionsItemSelected()` 方法监听返回按钮的点击事件,点击返回按钮时关闭当前活动。

总体来说,这段代码实现了一个简单的订单展示功能,包括从数据库加载数据、下拉刷新功能、以及返回按钮的处理。

package com.example.ordersystem.Activity;import androidx.appcompat.app.ActionBar;
import androidx.appcompat.app.AppCompatActivity;
import androidx.appcompat.widget.Toolbar;
import androidx.recyclerview.widget.GridLayoutManager;
import androidx.recyclerview.widget.RecyclerView;
import androidx.swiperefreshlayout.widget.SwipeRefreshLayout;import android.os.Bundle;
import android.view.MenuItem;
import android.widget.Toast;import java.util.ArrayList;
import java.util.List;import com.example.ordersystem.Adapter.OrderAdapter;
import com.example.ordersystem.Bean.Order;
import com.example.ordersystem.DataBase.OrderDao;
import com.example.ordersystem.R;public class OrderActivity extends AppCompatActivity {private List<Order> orderList = new ArrayList<>();private OrderAdapter orderAdapter;private OrderDao orderDao;private SwipeRefreshLayout swipeRefresh;@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_order);initView();}private void initView() {// 滚动布局RecyclerView recyclerView = findViewById(R.id.recycler_view);// 下拉刷新swipeRefresh = findViewById(R.id.swipe_refresh);swipeRefresh.setColorSchemeResources(R.color.design_default_color_primary);// 自定义工具栏Toolbar toolbar = findViewById(R.id.toolbar);setSupportActionBar(toolbar);ActionBar actionBar = getSupportActionBar();if (actionBar != null) {actionBar.setDisplayHomeAsUpEnabled(true);}initOrder();GridLayoutManager layoutManager = new GridLayoutManager(this, 1);recyclerView.setLayoutManager(layoutManager);orderAdapter = new OrderAdapter(orderList);recyclerView.setAdapter(orderAdapter);swipeRefresh.setOnRefreshListener(new SwipeRefreshLayout.OnRefreshListener() {@Overridepublic void onRefresh() {refreshOrder();}});}// 初始化数据(获取数据源)private void initOrder() {orderList.clear();orderDao = new OrderDao(this);orderDao.openDB();List<Order> tempList = orderDao.getAllOrder();orderDao.closeDB();for (int i = 0; i < tempList.size(); i++) {orderList.add(tempList.get(i));}}// 刷新订单信息private void refreshOrder() {new Thread(new Runnable() {@Overridepublic void run() {try {Thread.sleep(2000);} catch (InterruptedException e) {e.printStackTrace();}runOnUiThread(new Runnable() {@Overridepublic void run() {initOrder();orderAdapter.notifyDataSetChanged();swipeRefresh.setRefreshing(false);Toast.makeText(OrderActivity.this, "刷新成功!", Toast.LENGTH_SHORT).show();}});}}).start();}@Overridepublic boolean onOptionsItemSelected(MenuItem item) {switch (item.getItemId()) {case android.R.id.home:finish();return true;}return super.onOptionsItemSelected(item);}
}

四、完整的项目源码 

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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.xdnf.cn/news/1474948.html

如若内容造成侵权/违法违规/事实不符,请联系一条长河网进行投诉反馈,一经查实,立即删除!

相关文章

vb.netcad二开自学笔记6:第一个绘制线段命令

.net编写绘制直线已完全不同于ActiveX的&#xff08;VBA&#xff09;的方式&#xff0c;过程更类似于arx程序&#xff0c;需要通过操作AutoCAD 数据库添加对象&#xff01;下面的代码是在以前代码基础上添加了一个新myline命令。 AutoCAD 数据库结构 myline命令代码 Imports A…

Unity AssetsBundle 详解

文章目录 1.AssetBundle 概念2.AssetBundle 优势3.AssetBundle 特性4.AssetBundle 使用流程4.1 分组4.2 打包4.3 加载包4.4 加载资源4.5 卸载资源 5.AssetBundleManifest6.AssetBundle的内存占用7.AB包资源加密 1.AssetBundle 概念 AssetBundle又称AB包&#xff0c;是Unity提供…

hadoop分布式中某个 节点报错的解决案例

前言 在分布式节点中&#xff0c;发现有个节点显示不可用状态&#xff0c;因此需要紧急修复。 hadoop版本 目前这套集群hadoop的版本如下&#xff1a; 集群报错详细日志&#xff1a; 1/1 local-dirs are bad: /kkb/install/hadoop-2.6.0-cdh5.14.2/hadoopDatas/tempDatas/n…

服务器本地部署文件服务器minio

minio类似于阿里云的OSS&#xff0c;为不方便把图、文、日志等形式的文件保存在公有云上的&#xff0c;可以在自己的服务器上部署文件服务器 看过本人前几个文章的&#xff0c;使用docker就会很快上手部署&#xff0c;直接上所有代码 #添加镜像 docker search minio docker p…

python - 文件 / 永久存储:pickle / 异常处理

一.文件 利用help(open)可以看到open()函数的定义&#xff1a; >>> help(open) Help on built-in function open in module _io:open(file, moder, buffering-1, encodingNone, errorsNone, newlineNone, closefdTrue, openerNone) 默认打开模式是’rt’&#xff0…

【网络安全】实验三(基于Windows部署CA)

一、配置环境 打开两台虚拟机&#xff0c;并参照下图&#xff0c;搭建网络拓扑环境&#xff0c;要求两台虚拟的IP地址要按照图中的标识进行设置&#xff0c;并根据搭建完成情况&#xff0c;勾选对应选项。注&#xff1a;此处的学号本人学号的最后两位数字&#xff0c;1学号100…

逆袭707计划

暑假沉淀计划707 上午&#xff1a; 早起习惯&#xff1a;先打开idea将昨日所学代码敲一遍&#xff08;预估半小时&#xff09; 早饭时间可并发查看是否有自媒体商单 学习一节JavaEE课程&#xff08;预估一个半小时&#xff09; 完成对应的作业&#xff08;预估一个小时&am…

Python28-9 XGBoost算法

XGBoost&#xff08;eXtreme Gradient Boosting&#xff0c;其正确拼写应该是 "Extreme Gradient Boosting"&#xff0c;而XGBoost 的作者在命名时故意使用了不规范的拼写&#xff0c;将“eXtreme”中的“X”大写&#xff0c;以突出其极限性能和效率&#xff09;是一…

【python学习】快速了解python基本数据类型

&#x1f3ac; 鸽芷咕&#xff1a;个人主页 &#x1f525; 个人专栏: 《C干货基地》《粉丝福利》 ⛺️生活的理想&#xff0c;就是为了理想的生活! 文章目录 前言1. 整数&#xff08;int&#xff09;2. 浮点数&#xff08;float&#xff09;3. 布尔值&#xff08;bool&#xf…

WPS+Python爬取百度之星排名

运行效果 手动拉取 https://www.matiji.net/exam/contest/contestdetail/146 如果手动查找&#xff0c;那么只能通过翻页的方式&#xff0c;每页10行&#xff08;外加一行自己&#xff09;。 爬取效果预览 本脚本爬取了个人排名和高校排名&#xff0c;可以借助WPS或MS Offi…

前端web在线PPT编辑器-PPTLIST

哈喽&#xff0c;大家好&#xff0c;今天给大家介绍一款的在线的PPT编辑器开源框架-PPTLIST&#xff1b;他是一个基于 Vue3.x TypeScript 的在线演示文稿&#xff08;幻灯片&#xff09;应用&#xff0c;还原了大部分 Office PowerPoint 常用功能&#xff0c;支持 文字、图片、…

【ffmpeg系列一】源码构建,ubuntu22与win10下的过程对比。

文章目录 背景ubuntu22结论 win10过程 对比结论 背景 顺手编译个ffmpeg试试&#xff0c;看看不同平台下谁的配置比较繁琐。 先让gpt给出个教程&#xff1a; ubuntu22 使用elementary-os7.1构建&#xff0c;看看有几个坑要踩。 错误1&#xff1a; 依赖libavresample-dev未…

明日周刊-第15期

赶在周末结束前输出一把&#xff0c;周日的晚上大家要睡个好觉哦。 文章目录 一周热点资源分享言论歌曲推荐 一周热点 科技创新与基础设施建设 深中通道正式通车试运营 时间&#xff1a;6月30日 内容&#xff1a;国家重大工程深中通道正式通车试运营&#xff0c;标志着珠江口东…

数据列表组件-报表

当数据在后端接口查询到&#xff0c;需要在页面展示出来&#xff0c;如果项目有很多report &#xff0c;可以把列表做一个组件 效果如下&#xff1a; js代码&#xff1a; <!DOCTYPE html> <html> <head><meta charset"utf-8" /><title&g…

用Goaccess对Web及雷池WAF日志实现可视化分析

君衍. 一、项目环境介绍二、Goaccess1、Goaccess介绍2、存储方式3、配置选项4、自定义日志/日期格式5、特殊格式说明符 三、雷池访问日志1、配置文件改变2、docker配置3、示例测试 四、Goaccess安装1、安装依赖2、编译安装 五、Goaccess对Nginx日志分析1、常用命令参数2、终端模…

第10章:网络与信息安全

目录 第10章&#xff1a;网络与信息安全 网络概述 计算机网络概念 计算机网络的分类 网络的拓扑结构 ISO/OSI网络体系结构 网络互联硬件 物理层互联设备 数据链路层互联设备 网络层互联设备 应用层互联设备 网络的协议与标准 网络标准 TCP/IP协议族 网络接口层协…

【Threejs进阶教程-优化篇】4.Vue/React与threejs如何解决冲突和卡顿(续)

Vue/React与threejs如何解决冲突和卡顿-续 使用说明核心思路环境搭建(vuethree)vue运行机制分析业务分离使用threejs做背景 3D模块封装使用ES6的Class来让逻辑性更强Threejs尽量按需引入创建一个类扩展写法本次代码执行顺序 扩展内容添加orbitControls和辅助线解决事件覆盖 与V…

《python程序语言设计》2018版第5章第53题利用turtle绘制sin和cos函数 sin蓝色,cos红色和52题类似

直接上题和代码 5.53 &#xff08;Turtle&#xff1a;绘制sin和cos函数&#xff09;编写程序绘制蓝色的sin函数和红色的cos函数。 代码和结果 turtle.speed(10) turtle.penup() # sin 用蓝色 turtle.color("blue") #这道题和上道题一样&#xff0c;先把turtle放到起始…

go-redis 封装事件-client封装模型、批量数据处理的导出器设计

一、redis-go的封装实践-client模型 // Copyright 2020 Lingfei Kong <colin404foxmail.com>. All rights reserved. // Use of this source code is governed by a MIT style // license that can be found in the LICENSE file.package storageimport ("context&q…