網絡資源模板--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.pswp.cn/web/41989.shtml
繁體地址,請注明出處:http://hk.pswp.cn/web/41989.shtml
英文地址,請注明出處:http://en.pswp.cn/web/41989.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

在AvaotaA1全志T527開發板上使用AvaotaOS 部署 Docker 服務

Docker 是一個開源的應用容器引擎&#xff0c;讓開發者可以打包他們的應用以及依賴包到一個可移植的鏡像中&#xff0c;然后發布到任何流行的 Linux或Windows操作系統的機器上&#xff0c;也可以實現虛擬化。容器是完全使用沙箱機制&#xff0c;相互之間不會有任何接口。 準備…

dolphinscheduler-springboot集成

springboot集成dolphinscheduler 說明 為了避免對DolphinScheduler產生過度依賴&#xff0c;實踐中通常不會全面采用其內置的所有任務節點類型。相反&#xff0c;會選擇性地利用DolphinScheduler的HTTP任務節點功能&#xff0c;以此作為工作流執行管理的橋梁&#xff0c;對接…

信息技術課上的紀律秘訣:營造有序學習環境

信息技術課是學生們探索數字世界的樂園&#xff0c;但同時也是課堂紀律管理的挑戰場。電腦、網絡、游戲等元素可能分散學生的注意力&#xff0c;影響學習效果。本文將分享一些有效的策略&#xff0c;幫助教師在信息技術課上維持課堂紀律&#xff0c;確保教學活動順利進行。 制…

幾何建模基礎-樣條曲線和樣條曲面介紹

1.概念介紹 1.1 樣條曲線的來源 樣條的英語單詞spline來源于可變形的樣條工具&#xff0c;那是一種在造船和工程制圖時用來畫出光滑形狀的工具&#xff1a;富有彈性的均勻細木條/金屬條/有機玻璃條&#xff0c;它圍繞著按指定位置放置的重物或者壓鐵做彈性彎曲&#xff0c;以…

JS實現一個簡單的模糊匹配

1、示例數據如下&#xff1a; // 示例數據 const data [ { name: ‘Alice’, age: 25 }, { name: ‘Bob’, age: 30 }, { name: ‘Charlie’, age: 35 }, { name: ‘David’, age: 40 }, { name: ‘Eve’, age: 45 } ]; 2、模糊匹配函數 // 模糊匹配函數 function fuzzyMatch(…

基于LangChain的RAG開發教程(二)

v1.0官方文檔&#xff1a;https://python.langchain.com/v0.1/docs/get_started/introduction/ 最新文檔&#xff1a;https://python.langchain.com/v0.2/docs/introduction/ LangChain是一個能夠利用大語言模型&#xff08;LLM&#xff0c;Large Language Model&#xff09;能…

植物大戰僵尸融合嫁接版 MAC 版本下載安裝詳細教程

繼植物大戰僵尸雜交版火了之后&#xff0c;PVZ改版可謂是百花齊放&#xff0c;最近又有一個非常好玩的模式被開發出來了&#xff0c;他們稱為《植物大戰僵尸融合嫁接版》 該版本并沒有對植物卡牌做改動&#xff0c;而是可以將任意兩種植物疊放到一起進行融合&#xff0c;產生新…

思路打開!騰訊造了10億個角色,驅動數據合成!7B模型效果打爆了

世界由形形色色的角色構成&#xff0c;每個角色都擁有獨特的知識、經驗、興趣、個性和職業&#xff0c;他們共同制造了豐富多元的知識與文化。 所謂術業有專攻&#xff0c;比如AI科學家專注于構建LLMs,醫務工作者們共建龐大的醫學知識庫&#xff0c;數學家們則偏愛數學公式與定…

lvgl 本地化

生成語言包文件&#xff1a; lv_i18n compile -t en-GB.yml -o ui 正則匹配中文 "[\u4e00-\u9fa5]" _("[\u4e00-\u9fa5]") https://www.cnblogs.com/jerryqi/p/9604828.html 查找多個漢字體的 ("[\u4e00-\u9fa5]"[)]) _($1) "科室:"…

數據分析與挖掘實戰案例-電商產品評論數據情感分析

數據分析與挖掘實戰案例-電商產品評論數據情感分析 文章目錄 數據分析與挖掘實戰案例-電商產品評論數據情感分析1. 背景與挖掘目標2. 分析方法與過程2.1 評論預處理1. 評論去重2. 數據清洗 2.2 評論分詞1. 分詞、詞性標注、去除停用詞2. 提取含名詞的評論3. 繪制詞云查看分詞效…

昇思25天學習打卡營第12天 | LLM原理和實踐:MindNLP ChatGLM-6B StreamChat

1. MindNLP ChatGLM-6B StreamChat 本案例基于MindNLP和ChatGLM-6B實現一個聊天應用。 ChatGLM-6B應該是國內第一個發布的可以在消費級顯卡上進行推理部署的國產開源大模型&#xff0c;2023年3月就發布了。我在23年6月份的時候就在自己的筆記本電腦上部署測試過&#xff0c;當…

UI自動化測試框架:PO 模式+數據驅動(超詳細)

1. PO 設計模式簡介 什么是 PO 模式&#xff1f; PO&#xff08;PageObject&#xff09;設計模式將某個頁面的所有元素對象定位和對元素對象的操作封裝成一個 Page 類&#xff0c;并以頁面為單位來寫測試用例&#xff0c;實現頁面對象和測試用例的分離。 PO 模式的設計思想與…

Python學習中進行條件判斷(if, else, elif)

條件判斷是編程中必不可少的一部分&#xff0c;它讓程序可以根據不同的條件執行不同的代碼塊。在Python中&#xff0c;主要使用if、elif和else語句來實現條件判斷。 基本語法 在Python中&#xff0c;條件判斷的基本語法如下&#xff1a; if condition:# 當condition為True時…

一篇讀懂128陷阱

128陷阱 128陷阱的概念包裝器類自動裝箱自動拆箱128陷阱 Intager源碼equals 128陷阱的概念 首先想要清楚什么是128陷阱&#xff0c;需要了解一些概念 包裝器類 包裝器類&#xff08;Wrapper classes&#xff09;是Java中的一組類&#xff0c;它們允許將基本數據類型&#xf…

NCCL 中的一些輔助debug 知識點

1&#xff0c;調試nccl 啟動kernel的方法 ncclLaunchKernel cuLaunchKernelEx ncclStrongStreamLaunchKernel cudaLaunchKernel ncclLaunchOneRank cudaLaunchKernel 在 nccl lib 中&#xff0c;不存在使用<<<grid, block,,>>> 這種類似方式啟…

算法題型歸類整理及同類題型解法思路總結(持續更新)

1、最優路線 通用思路 1、遞歸 #案例1-最優路測路線 題目描述 評估一個網絡的信號質量&#xff0c;其中一個做法是將網絡劃分為柵格&#xff0c;然后對每個柵格的信號質量計算。 路測的時候&#xff0c;希望選擇一條信號最好的路線&#xff08;彼此相連的柵格集合&#x…

12種增強Python代碼的函數式編程技術

前言 什么是函數式編程&#xff1f; 一句話總結&#xff1a;函數式編程(functional programming)是一種編程范式&#xff0c;之外還有面向對象&#xff08;OOP&#xff09;、面向過程、邏輯式編程等。 函數式編程是一種高度抽象的編程范式&#xff0c;它倡導使用純函數&#x…

算法·二分

二分枚舉 適用條件&#xff1a; 答案有明顯上下界答案具有單調性:a滿足,若b>a可以知b必定滿足。本質上是枚舉的對數優化 思維技巧 解決問題->>驗證答案,明顯前者比后者更加困難若題目有最大值最小&#xff0c;最小值最大這種經典條件&#xff0c;隱含著答案有界 …

Docker-11☆ Docker Compose部署RuoYi-Cloud

一、環境準備 1.安裝Docker 附:Docker-02-01☆ Docker在線下載安裝與配置(linux) 2.安裝Docker Compose 附:Docker-10☆ Docker Compose 二、源碼下載 若依官網:RuoYi 若依官方網站 鼠標放到"源碼地址"上,點擊"RuoYi-Cloud 微服務版"。 跳轉至G…

深入理解計算機系統 CSAPP 家庭作業8.22

書本知識夠你寫出答案,但是如果你想驗證你寫的答案,就要一些額外的東西.這本書很多題目都是如此 /** mysystem.c*/ #include <stdio.h> #include "csapp.h"int mysystem(char* command) {pid_t pid;int status;if ((pid Fork()) 0) {/*這里是關鍵用子程序去…