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

news2024/9/20 8:06:52

目录

一、项目演示

二、项目测试环境

三、项目详情

四、完整的项目源码 


原创外卖点餐:基于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">

    <ImageView
        android: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;

    @Override
    protected 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() {
            @Override
            public 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() {
            @Override
            public void onClick(View v) {
                Intent intent = new Intent(LoginActivity.this, RegisterActivity.class);
                startActivityForResult(intent,1);
            }
        });
    }

    @Override
    protected 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;

    @Override
    protected 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() {
            @Override
            public 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() {
            @Override
            public 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;

    @Override
    public 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() {
            @Override
            public 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() {
            @Override
            public void run() {
                try {
                    Thread.sleep(2000);
                } catch (InterruptedException e) {
                    e.printStackTrace();
                }
                getActivity().runOnUiThread(new Runnable() {
                    @Override
                    public 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;

    @Override
    public 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() {
            @Override
            public void onRefresh() {
                refershCart();
            }
        });
        // 订单提交
        fab.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                AlertDialog alertDialog = new AlertDialog.Builder(view.getContext())
                        .setTitle("提示")
                        .setIcon(R.drawable.ic_order)
                        .setMessage("您确定要提交订单吗?")
                        .setPositiveButton("确定", new DialogInterface.OnClickListener() {
                            @Override
                            public 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() {
                            @Override
                            public 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() {
            @Override
            public void run() {
                try {
                    Thread.sleep(2000);
                } catch (InterruptedException e) {
                    e.printStackTrace();
                }
                getActivity().runOnUiThread(new Runnable() {
                    @Override
                    public void run() {
                        initCart();
                        cartAdapter.notifyDataSetChanged();
                        swipeRefresh.setRefreshing(false);
                        Toast.makeText(getContext(), "刷新成功!", Toast.LENGTH_SHORT).show();
                    }
                });
            }
        }).start();
    }


    // 多线程,异步消息机制
    private Handler handler = new Handler() {
        @Override
        public 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;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_food);
        initView();
    }

    private void initView() {
        foodDao = new FoodDao(this);
        Intent intent = getIntent();
        // 获取通过参数传递过来的序列化对象,向下转型为Food
        Food 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(){
            @Override
            public 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();
    }
    // 菜单栏返回按钮的点击事件
    @Override
    public 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;

    @Override
    public 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() {
            @Override
            public 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,"分享到...."));
    }

    @Override
    public 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;

    @Override
    protected 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() {
            @Override
            public 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() {
            @Override
            public void run() {
                try {
                    Thread.sleep(2000);
                } catch (InterruptedException e) {
                    e.printStackTrace();
                }
                runOnUiThread(new Runnable() {
                    @Override
                    public void run() {
                        initOrder();
                        orderAdapter.notifyDataSetChanged();
                        swipeRefresh.setRefreshing(false);
                        Toast.makeText(OrderActivity.this, "刷新成功!", Toast.LENGTH_SHORT).show();
                    }
                });
            }
        }).start();
    }
    @Override
    public boolean onOptionsItemSelected(MenuItem item) {
        switch (item.getItemId()) {
            case android.R.id.home:
                finish();
                return true;
        }
        return super.onOptionsItemSelected(item);
    }
}

四、完整的项目源码 

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

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

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

相关文章

通义千问Qwen-VL-Chat大模型本地部署(一)

目录 前言 环境准备 软件安装 其它库安装启动项目 FASTAPI 小结 前言 人工智能大模型是一种能够利用大数据和神经网络来模拟人类思维和创造力的人工智能算法。它利用海量的数据和深度学习技术来理解、生成和预测新内容&#xff0c;通常情况下有数十亿乃至数百亿个参数&#xf…

关于Web开发的详细介绍

目录 一、什么是Web&#xff1f; 二、Web网站的工作流程和开发模式 &#xff08;1&#xff09;简单介绍 &#xff08;2&#xff09;工作流程 1、第一步 2、第二步 &#xff08;3&#xff09;Web网站的开发模式 1、前后端分离开发模式 ​编辑2、混合开发模式 三、开发W…

36.哀家要长脑子了!--前缀和差分

前缀和 1.一维的795. 前缀和 - AcWing题库 前缀和公式 s[i] a[1] a[2] a[3] ... a[i] 即 s[i] s[i-1] a[i] #include<iostream> using namespace std;const int N 1e5 10; int a[N], s[N];int main(){int m, n;cin >> n >> m;for(int i 1; i <…

鸿蒙开发:Universal Keystore Kit(密钥管理服务)【加解密(ArkTS)】

加解密(ArkTS) 以AES 128密钥为例&#xff0c;完成加解密。具体的场景介绍及支持的算法规格。 开发步骤 生成密钥 指定密钥别名。初始化密钥属性集。调用[generateKeyItem]生成密钥&#xff0c;具体请参考[密钥生成]。开发前请熟悉鸿蒙开发指导文档&#xff1a;gitee.com/l…

数据库之MQL

1&#xff0c;查询所有 mysql> select * from grade;2&#xff0c; mysql> select id,firstname,lastname from grade;3&#xff0c; mysql> select firstname,lastname from grade where id > 4;4&#xff0c; mysql> select * from grade where sex f;5&…

pandas数据分析(8)

描述性统计量和数据聚合 描述性统计量 描述性统计量通过量化数据来概括数据集。DataFrame和Series可以通过sum、mean、count等方法来获取各种描述性统计量。在默认情况下会按照axis0返回一个Series&#xff0c;也就是说会得到一个有关列的统计量&#xff1a; 如果要计算行的统…

【解决Windows11系统Windows Hello不能使用的问题】

提示&#xff1a;文章写完后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 文章目录 前言一、Windows Hello是什么&#xff1f;二、使用步骤1.购买一个摄像头2.开始配置 三、异常解决1.内置管理员不能使用2.没找到合适的摄像头3.摄像头需要专用驱动4.…

CSS技巧 - 一日一例 (1):会讨好的热情按钮

题外话: 从今天开始,我准备开设一个新的专栏,专门写 使用CSS实现各种酷炫按钮的方法,本专栏目前准备写40篇左右,大概会完成如下按钮效果: 今天,我来介绍第一个按钮的实现方法:会讨好的热情按钮。为什么我给它起这样的名字呢?你看它像不像一个不停摇尾巴的小黄?当你鼠…

Java---包装类与泛型

1.包装类 1.1 包装类 在Java中&#xff0c;由于基本数据类型不是继承Object类&#xff0c;为了在泛型代码中可以支持基本数据类型&#xff0c;Java给每个基本数据类型各自提供了一个包装类。 如下图 除了char和int基本数据类型的包装类型有点特别&#xff0c;其他的都是首字…

百川工作手机实现销售管理微信监控系统

在瞬息万变的商业战场中&#xff0c;每一分效率的提升都是企业制胜的关键。传统销售管理模式已难以满足现代企业对精准、高效、合规的迫切需求。今天&#xff0c;让我们一同探索如何利用工作手机这一创新工具&#xff0c;为您的销售团队装上智能翅膀&#xff0c;开启销售管理的…

ELfK logstash filter模块常用的插件 和ELFK部署

ELK之filter模块常用插件 logstash filter模块常用的插件&#xff1a; filter&#xff1a;表示数据处理层&#xff0c;包括对数据进行格式化处理、数据类型转换、数据过滤等&#xff0c;支持正则表达式 grok 对若干个大文本字段进行再分割成一些小字段 (?<字段名…

ROS中不同文件之间的引用小结

在比较大的一些程序中&#xff0c;往往会涉及到一些不同模块的调用&#xff0c;如果这些东西放在一个.cpp文件内&#xff0c;这个文件会变的特别长&#xff0c;因此会使用多个文件互相引用。那么如何在ROS下进行这种不同文件下的引用呢&#xff0c;根据最近所学&#xff0c;简单…

【大模型LLM面试合集】大语言模型基础_Word2Vec

Word2Vec 文章来源&#xff1a;Word2Vec详解 - 知乎 (zhihu.com) 1.Word2Vec概述 Word2Vec是google在2013年推出的一个NLP工具&#xff0c;它的特点是能够将单词转化为向量来表示&#xff0c;这样词与词之间就可以定量的去度量他们之间的关系&#xff0c;挖掘词之间的联系。 …

世界商用飞机机型大全-使用Java抓取FlightAware后的答案

目录 前言 一、数据说明 1、实时航班飞机机型数据 2、网页结构分析 二、使用Java进行信息抓取 1、定义页面PageVO对象 2、爬取属性定义 3、启动信息抓取组件 三、成果分析 1、商业飞行的飞机机型的种类 2、飞机种类排名前十名 3、航班数排名后十名 4、看中国国产大飞…

解读BASE理论:高可用性与性能的完美平衡

Base概念 BASE 理论是一种处理大规模分布式系统中的数据一致性问题的思路。相比于传统的严格一致性&#xff0c;它更灵活&#xff0c;适用于那些需要高可用性和性能的系统。BASE 理论由三个部分组成&#xff1a; 基本可用&#xff08;Basically Available&#xff09; 基本可用…

《Programming from the Ground Up》阅读笔记:p19-p48

《Programming from the Ground Up》学习第2天&#xff0c;p19-p48总结&#xff0c;总计30页。 一、技术总结 1.object file p20, An object file is code that is in the machine’s language, but has not been completely put together。 之前在很多地方都看到object fi…

算法期末程序填空

1.有重复元素全排列的计数问题(部分正确 【考察知识点】有重复元素的全排列的计数 【题目描述】 共有n个小球&#xff08;1<n<20&#xff09;&#xff0c;这n个小球有k种颜色&#xff08;1<k<10&#xff09;&#xff0c;白色s1​个&#xff0c;红色s2​个&#…

大模型时代的蓝海任务,GPT4V准确率不足10%,港科大发布指代理解基准RefCOCO

谈到多模态大模型的应用场景&#xff0c;除了生成任务以外&#xff0c;应用最广泛的可能就是在图像和视频中进行目标检测。 目标检测要求从图像中识别并标注出所有感兴趣的对象&#xff0c;并给每个对象分配一个类别标签。典型的目标检测方法会生成边界框&#xff0c;标记出图…

百度、谷歌、必应收录个人博客网站

主要是给各个搜索引擎提交你的sitemap文件&#xff0c;让别人能搜到你博客的内容。 主题使用的Butterfly。 生成sitemap 安装自动生成sitemap插件。 npm install hexo-generator-sitemap --save npm install hexo-generator-baidu-sitemap --save在站点配置文件_config.yml…

LabVIEW高能质子束流密度分布测试系统

LabVIEW平台开发的高能质子束流密度分布测试系统。该系统主要应用于电子器件的抗辐射加固试验&#xff0c;旨在精确测量高能质子束的密度分布&#xff0c;以评估电子器件在辐射环境下的性能表现和耐受能力。 系统组成与设计 硬件组成&#xff1a; 法拉第杯探测器&#xff1a;…