zoukankan      html  css  js  c++  java
  • 【Android】家庭记账本手机版开发报告四

    一、说在前面

    昨天 对界面显示和逻辑结构进行完善
    今天

    1、添加菜单(查询、清除所有等)

    2、使用滑动删除

    问题

    1、在做查询时获取SearchView时引

    入包错误经过长时间的尝试后才修正

    2、滑动删除的撤销问题。

    二、菜单设计

    1、创建菜单资源

     

     2、添加两个MenuItem 和一个搜索标志

    3、将菜单设置在AccountRecordFragment 的界面上,并关联数据库

    @Override
        public void onCreateOptionsMenu(@NonNull Menu menu, @NonNull MenuInflater inflater) {
            super.onCreateOptionsMenu(menu, inflater);
            inflater.inflate(R.menu.show_menu,menu);
            SearchView searchView = (SearchView) menu.findItem(R.id.app_bar_search).getActionView();
            searchView.setMaxWidth(1000);
            searchView.setOnQueryTextListener(new SearchView.OnQueryTextListener() {
                @Override
                public boolean onQueryTextSubmit(String query) {
                    return false;
                }
                @Override
                public boolean onQueryTextChange(String newText) {
                    String type = newText.trim();
                    findAccountRecord.removeObservers(requireActivity());
                    findAccountRecord = accountRecordViewModel.getAcountRecordByType(type);
                    findAccountRecord.observe(requireActivity(), new Observer<List<AccountRecord>>() {
                        @Override
                        public void onChanged(List<AccountRecord> accountRecords) {
                            allAccountRecord = accountRecords;
                            myAdpter.setAllAccountRecords(accountRecords);
                            myAdpter.notifyDataSetChanged();
                        }
                    });
                    return true;
                }
            });
        }

    4、查询数据库的相关修改

    1)dao层

    @Query("SELECT * From ACCOUNTRECORD WHERE cost_type LIKE :type ORDER BY ID DESC")
        LiveData<List<AccountRecord>> getAccountRecordLiveByType (String type);

    2)“工厂”

    public LiveData<List<AccountRecord>> getAcountRecordByType(String type) {
            return accountRecordDao.getAccountRecordLiveByType("%"+type+"%");//实现模糊查询
        }

    3)ViewModel

    public LiveData<List<AccountRecord>> getAcountRecordByType(String type) {
            return accountRecordRepository.getAcountRecordByType(type);
        }

    4、清空所有账单的设置(“简陋版”)

    @Override
        public boolean onOptionsItemSelected(@NonNull MenuItem item) {
    
            switch (item.getItemId()){
                case R.id.clear:
                    AlertDialog.Builder builder = new AlertDialog.Builder(requireActivity());
                    builder.setTitle("清空账单");
                    builder.setPositiveButton("确定", new DialogInterface.OnClickListener() {
                        @Override
                        public void onClick(DialogInterface dialog, int which) {
                            accountRecordViewModel.deleteAllAccountRecord();
                        }
                    });
                    builder.setNegativeButton("取消", new DialogInterface.OnClickListener() {
                        @Override
                        public void onClick(DialogInterface dialog, int which) {
    
                        }
                    });
                    builder.create();
                    builder.show();
                    break;
            }
            return super.onOptionsItemSelected(item);
        }

    5、滑动删除

    new ItemTouchHelper(new ItemTouchHelper.SimpleCallback(0,ItemTouchHelper.START | ItemTouchHelper.END) {
                @Override
                public boolean onMove(@NonNull RecyclerView recyclerView, @NonNull RecyclerView.ViewHolder viewHolder, @NonNull RecyclerView.ViewHolder target) {
                    return false;
                }
    
                @Override
                public void onSwiped(@NonNull RecyclerView.ViewHolder viewHolder, int direction) {
                    AccountRecord accountRecord = allAccountRecord.get(viewHolder.getLayoutPosition());
                    accountRecordViewModel.deleteAccountRecord(accountRecord);
                }
            }).attachToRecyclerView(recyclerView);

    三、运行测试

     

     

  • 相关阅读:
    Nginx URL后面不加斜杠301重定向
    Jenkins 配置 Node.js 项目
    在 Linux 上搭建IntelliJ IDEA license server服务器
    Vue 使用细节收集
    sinopia 搭建记录
    cli 开发记录
    Cgroup(一)简介
    Kubernetes (一)POD驱逐
    RabbitMQ(五)镜像队列
    RabbitMQ(四)队列结构
  • 原文地址:https://www.cnblogs.com/20183544-wangzhengshuai/p/12228814.html
Copyright © 2011-2022 走看看