一、说在前面

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

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);

三、运行测试

【Android】家庭记账本手机版开发报告四的更多相关文章

  1. 【Android】家庭记账本手机版开发报告五

    一.说在前面   昨天  1.添加菜单(查询.清除所有等)2.使用滑动删除   今天 1.创建登入和注册界面 2.向数据库添加一张用户表   问题 做完后在登入时有bug(未解决) 二.界面的搭建 1 ...

  2. 【Android】家庭记账本手机版开发报告二

    一.说在前面 昨天 完成了对记账本的账单的增删 今天 完善昨天的框架结构( 1.引入ViewModel管理数据.使MainActive 只管理界面.不再管数据了 2.引入AsyncTask.后台执行. ...

  3. 【Android】家庭记账本手机版开发报告一

    一.说在前面 昨天 学习了数据库的一些简单操作 今天 使用数据库,完成对记账本的账单记录的增删 问题 没有 二.数据库 1.账单表的结构 (注 id:账单的唯一标识,uid:记录账单的用户的id,co ...

  4. 【Android】家庭记账本手机版开发报告七

    一.说在前面  昨天 实现了账单的图标显示  今天 本地化,测试APP,将工程源码放到github上 源码:https://github.com/xiaotian12-call/Android_Boo ...

  5. 【Android】家庭记账本手机版开发报告六

    一.说在前面  昨天 1.创建登入和注册界面:2.向数据库添加一张用户表  今天 用图标显示账单情况 问题 1.使用第三方库 hellochart,时添加依赖构建失败 2.在 chertFragmen ...

  6. 【Android】家庭记账本手机版开发报告三

    一.说在前面 昨天 对第一天的框架结构进行了四方面的完善 今天 对界面显示和逻辑结构进行完善 问题 无 二.界面展示完善 1.使用可回收的列表recyclerView展示账单的信息,并设置数据项为卡片 ...

  7. Android深度探索--HAL与驱动开发----第四章读书笔记

    1. 下载.编译.测试源代码 创建存放下载文件的目录(repo) 下载repo脚本文件 创建用于存放源代码的目录 开始下载源代码. 2. 源代码目录含义摘要 Abi 应用程序二进制接口 Device ...

  8. Android深度探索HAL与驱动开发 第四章 源代码下载和编译

    前面说过Android移植主要就是Linux内核的移植,而Linux内核移植主要是Linux驱动的移植,所以为了开发和测试Linux驱动,有必要学习在Ubuntu Linux下如何搭建两套开发环境:A ...

  9. 20145221 《Java程序设计》实验报告四:Android开发基础

    20145221 <Java程序设计>实验报告四:Android开发基础 实验要求 基于Android Studio开发简单的Android应用并部署测试; 了解Android组件.布局管 ...

随机推荐

  1. main.js index.html与app.vue三者关系详解

    main.js index.html与app.vue三者关系详解 2019年01月23日 11:12:15 Pecodo 阅读数 186   main.js与index.html是nodejs的项目启 ...

  2. 从0开始完成SpringBoot+Mybatis实现增删改查

    1.准备知识: 1)需要掌握的知识: Java基础,JavaWeb开发基础,Spring基础(没有Spring的基础也可以,接触过Spring最好),ajax,Jquery,Mybatis. 2)项目 ...

  3. Metasploit学习笔记——社会工程学

    1.社会工程学攻击案例——伪装木马 Linux命令终端输入命令msfvenom -l payloads用来列出攻击载荷,grep命令用来查询所需要的攻击载荷,条件是windows系统.要有回连至监听主 ...

  4. Day9 - J - 吉哥系列故事——恨7不成妻 HDU - 4507

    单身! 依然单身! 吉哥依然单身! DS级码农吉哥依然单身! 所以,他生平最恨情人节,不管是214还是77,他都讨厌! 吉哥观察了214和77这两个数,发现: 2+1+4=7 7+7=7*2 77=7 ...

  5. 「NOIP2011」Mayan游戏

    传送门 Luogu 解题思路 爆搜,并考虑几个剪枝. 不交换颜色相同的方块(有争议,但是可以过联赛数据 \(Q \omega Q\)) 左边为空才往左换 右边不为空才往右换 因为对于两个相邻方块,右边 ...

  6. Random Process Modeling_1

    1. Bertrand Triangle r=1; %circle radius x0=0; y0=0; %centre of circle %points for circle t=linspace ...

  7. centos7安装mariadb(mysql)

    centos7 默认可以yum -y install mariadb-server mariadb mariadb-client mariadb-devel 如果出现错误 GPG key retrie ...

  8. R 《回归分析与线性统计模型》page121,4.4

    rm(list = ls()) A = read.xlsx("xiti_4.xlsx",sheet = 4) names(A) = c("ord"," ...

  9. 015.Oracle数据库,取本月月初,取本月月末

    /*取本月月初,取本月月末*/ SELECT trunc( SYSDATE, 'mm' ) AS 月初 , last_day(trunc(sysdate)) AS 月末 FROM dual; 修改如下 ...

  10. sql语句中 and 与or 的优先级