目錄
一、項目演示
二、項目測試環境
三、項目詳情
四、完整的項目源碼?
原創外賣點餐:基于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);}
}
四、完整的項目源碼?
👇👇👇👇👇快捷獲取方式👇👇👇👇👇