首页 > 编程语言 > 安卓期末大作业——单词本APP(源码+任务书)

安卓期末大作业——单词本APP(源码+任务书)

时间:2022-12-28 20:00:54浏览次数:42  
标签:添加 删除 安卓 视图 单词 点击 源码 任务书 方法

项 目 报 告

2020 - 2021 学年 第 2 学期

课程名称: Android移动开发技术

项目名称: 单词本

学生姓名:

小组成员:

2021年 6 月

题目:单词本APP

1需求分析与系统设计

  1. 项目介绍

此项目是一个帮助记忆单词的单词本,用户输入要记忆的单词,系统会自动保存到sqllte数据库中,用户可以自行设置界面风格。设置单词记忆顺序等,可以查找单词,删除单词,以及隐藏中文。可以帮助用户更好的记忆单词。

  1. 功能需求
  2. 单词本可以通过用户输入中英文,来实现单词的添加。
  3. 用户可以随意开关某个单词的中文释义
  4. 用户可以删除已经添加的单词
  5. 用户关机或者退出应用不会导致单词本内的单词丢失
  6. 用户可以自定义单词本中单词的顺序
  7. 可以选择自己喜欢的界面风格
  8. 用户可以快捷的查找某个单词在有道上的详细信息
  9. 用户可以查找某个单词
  1. 功能需求及示意图
  1. 用户点击加号按钮输入单词,键盘会自动弹出并焦点在输入框,用户输入英文和中文释义,单词本上将在最上面显示这个单词,并会有下拉动画。用户可以通过上方放回箭头取消输入。

 安卓期末大作业——单词本APP(源码+任务书)_单词本

 安卓期末大作业——单词本APP(源码+任务书)_单词记忆_02

 安卓期末大作业——单词本APP(源码+任务书)_单词记忆_03

  1. 用户可以通过单词盘边的按钮来关闭或开启中文意思

 安卓期末大作业——单词本APP(源码+任务书)_单词本_04

  1. 向右滑可以删除单词,同时底部有提示信息,可以撤销删除,点击撤销可以还原被删除的单词

 安卓期末大作业——单词本APP(源码+任务书)_数据_05

 安卓期末大作业——单词本APP(源码+任务书)_数据_06

  1. 长按拖住上下滑动可以设置单词的优先级

 安卓期末大作业——单词本APP(源码+任务书)_数据_07

 安卓期末大作业——单词本APP(源码+任务书)_搜索_08

  1. 搜索可以搜索相关的单词

 安卓期末大作业——单词本APP(源码+任务书)_数据_09

  1. 菜单可以选择切换界面或者删除全部单词,将以卡片/列表显示单词

 安卓期末大作业——单词本APP(源码+任务书)_数据库_10

 安卓期末大作业——单词本APP(源码+任务书)_单词本_11

注:由于时间仓促,该部分的示意图以截图的形式替代。

1.4本程序需解决的有关技术问题

1. CardView 和 constraintLayout的布局切换

2.通过继承asyncTask实现多线程查询数据库

3.查询数据库过程中多个类的调用和封装解耦,模块化开发

4.通过livedate监听数据变化来改变视图显示。

5.如何通过滑动删除单词和如何改变单词位置

6.各个framgement之间的切换导航

1.5程序流程

  1. 程序启动后先通过MainActivity的onCreate方法
  2. 进入wordsFramgment类,通过MyAdaper new出单词列表
  3. 当通过监听WordViewModel发现数据发生改变时,会同时增删改单词列表条数
  4. 对数据改变的方法通过WordViewModel类中的方法调用WordReposity中的方法再调用WordDatabase或WordDao中的方法进行增删改或者查询

5.通过Word 建立数据库表和映射关系。

2系统实现

2.1类分析与设计

(1)Word类:

1.这个这个类定义了单词条目的属性:id word chineseWord chineseInvisible 并同时映射到数据库对应的属性字段;

2.定义了set/get方法用于存取数据

 安卓期末大作业——单词本APP(源码+任务书)_单词记忆_12

(2)WordDao类:

1.dao层用注解定义了增删改查方法

对于复杂查询,再注解中定义了sql语句:

A.

 安卓期末大作业——单词本APP(源码+任务书)_数据_13

B.模糊查询并按倒叙排序

 安卓期末大作业——单词本APP(源码+任务书)_数据_14

 安卓期末大作业——单词本APP(源码+任务书)_单词记忆_15

(3)WordDatabase类:

1.利用单例工厂模式,new了一个WordDataBase类,这个类继承了RoomDatabase,建立了数据库,用来通过getDatabase来实例化WordDao

 安卓期末大作业——单词本APP(源码+任务书)_单词本_16

Static 可以不需要new 就可以调用方法

Synchronized同步块只有一个再执行,反正多线程而new了多个实例

此方法构建并返回一个wordDao。同时此方法中还包含数据库的升级及修改方法

(4)WordRepository类:

1.多线程调用WordDao的方法完成增删改查。

 安卓期末大作业——单词本APP(源码+任务书)_数据_17

2.主要功能是实现多线程

 安卓期末大作业——单词本APP(源码+任务书)_单词本_18

(5)WordViewModel类:

1.通过调用WordRepository类的方法完成增删改查

 安卓期末大作业——单词本APP(源码+任务书)_搜索_19

2.主要功能是处理数据相关功能,返回的LiveData可以监控数据变化,并再变化时调用相应方法来处理视图等。

 安卓期末大作业——单词本APP(源码+任务书)_数据库_20

(6)MainActivity类:

1.设置了视图导航。

 安卓期末大作业——单词本APP(源码+任务书)_数据_21

2.重写了返回键的方法

 安卓期末大作业——单词本APP(源码+任务书)_单词本_22

(7)AddFragment类:

1.定义了添加单词界面的功能

2.进入界面后,将输入框聚焦在英语输入框上,并弹出键盘。

 安卓期末大作业——单词本APP(源码+任务书)_数据_23

3.点击添加按钮后,通过WordViewModel将数据写入数据库,并通过导航回到主界面

 安卓期末大作业——单词本APP(源码+任务书)_单词记忆_24

(8)MyAdapter类

1.通过点击单词条,用intent并传入一个网址可以跳到有道词典搜索

 安卓期末大作业——单词本APP(源码+任务书)_单词本_25

2.通过查询数据库ChineseInvisible字段,初始化设置是否显示中文释义

 安卓期末大作业——单词本APP(源码+任务书)_数据_26

(9)WordFragment类

1搜索功能

 安卓期末大作业——单词本APP(源码+任务书)_数据_27

2.在WordsFragment中设置了菜单功能,点击清空数据会弹出alertDialog对话框,若选择确认,则调用wordViewModel中的deleteAll()方法删除所以数据;点击切换视图时,会先在SharePreferences中获得现在时什么视图的值,然后调用recyclerView的方法设置另一个视图。

 安卓期末大作业——单词本APP(源码+任务书)_数据库_28

3.用onChildDraw画滑动后面的灰色阴影和垃圾桶图标

 安卓期末大作业——单词本APP(源码+任务书)_数据_29

4.点击悬浮按钮跳到添加单词界面

 安卓期末大作业——单词本APP(源码+任务书)_搜索_30

5.移动单词和滑动删除单词功能

 安卓期末大作业——单词本APP(源码+任务书)_数据库_31

2.2 界面布局

 安卓期末大作业——单词本APP(源码+任务书)_单词本_32

 安卓期末大作业——单词本APP(源码+任务书)_数据_33

 安卓期末大作业——单词本APP(源码+任务书)_搜索_34

 安卓期末大作业——单词本APP(源码+任务书)_搜索_35

 安卓期末大作业——单词本APP(源码+任务书)_数据库_36

 安卓期末大作业——单词本APP(源码+任务书)_搜索_37

 安卓期末大作业——单词本APP(源码+任务书)_数据库_38

2.3关键实现

1.在AddFramgent中,若输入框两个都不为空,设置添加按钮可用

 安卓期末大作业——单词本APP(源码+任务书)_单词本_39

2.在MyAdapter中,监听开关,若发生改变显示/隐藏中文释义,同时修改数据库中ChineseVisible字段的值。

 安卓期末大作业——单词本APP(源码+任务书)_数据库_40

3.在WordsFragment中设置了菜单功能,点击清空数据会弹出alertDialog对话框,若选择确认,则调用wordViewModel中的deleteAll()方法删除所以数据;点击切换视图时,会先在SharePreferences中获得现在时什么视图的值,然后调用recyclerView的方法设置另一个视图。

 安卓期末大作业——单词本APP(源码+任务书)_数据库_41

4.滑动删除后会弹出一个snackbar,点击即可撤销删除

 安卓期末大作业——单词本APP(源码+任务书)_单词记忆_42

5.onMove()方法处理长按拖动事件,发生拖动时,替换两个Word的id,livedate检测到数据发生改变,就重新绘画界面

 安卓期末大作业——单词本APP(源码+任务书)_单词本_43

3系统测试

3.1程序存在的问题

(1)再添加单词页面点击上方或下方的返回,键盘不会消失

 安卓期末大作业——单词本APP(源码+任务书)_数据_44

 安卓期末大作业——单词本APP(源码+任务书)_单词记忆_45

解决方法:再AddFagment中button触发方法中添加键盘回缩方法:

 安卓期末大作业——单词本APP(源码+任务书)_数据_46

(2)在添加单词页面中,没有自动聚焦到英语单词输入框

解决方法:再onActivityCreate中添加方法

 安卓期末大作业——单词本APP(源码+任务书)_搜索_47

(3)若长按拖动速度过快,会导致有些单词的中文意思会自动隐藏。

(4)列表界面单词之间的分界不够明显

解决方法 再每个列表条目上添加下划线。

 安卓期末大作业——单词本APP(源码+任务书)_数据库_48

  1. 在部分手机版本中会出现搜索后单词丢失bug;

3.2运行过程示例

(1)添加单词: —单词添加成功

 安卓期末大作业——单词本APP(源码+任务书)_搜索_49

 安卓期末大作业——单词本APP(源码+任务书)_数据_50

(2)删除单词: —删除单词成功

 安卓期末大作业——单词本APP(源码+任务书)_数据_51

 安卓期末大作业——单词本APP(源码+任务书)_搜索_52

(3)中文释义显示/隐层:

 安卓期末大作业——单词本APP(源码+任务书)_单词记忆_53

 安卓期末大作业——单词本APP(源码+任务书)_单词记忆_54

(4)切换视图: -成功

 安卓期末大作业——单词本APP(源码+任务书)_数据库_55

(5)搜索功能: –成功

 安卓期末大作业——单词本APP(源码+任务书)_单词记忆_56

(6)点击单词后跳到有道词典搜索详细详细

 安卓期末大作业——单词本APP(源码+任务书)_单词本_57

 安卓期末大作业——单词本APP(源码+任务书)_搜索_58

4总结与建议

本课程学习了andorid的开发,经过本次项目,对android开发的整体把握更加清楚。

通过模块化开发,对每个类更加清楚,对liveData..SharePreference..navigation等类的使用和数据库的操作有了更加深入的理解。



标签:添加,删除,安卓,视图,单词,点击,源码,任务书,方法
From: https://blog.51cto.com/u_15681752/5976248

相关文章

  • 安卓期末大作业——琴社商店,sqlite增删改查
    建议从以下方面填写:1.课题的作用和意义 2.课题综述 3.完成思路与方法 4.软件设计流程图(图示说明系统)5.课程设计的收获格式(宋体、小四)、报告长度3-4页1.课题的作用和意......
  • 爱上 Mybatis源码 (2019-08-11)
     第一次学习源码,自己很难吃透源码,也做不到直接撸源码,一句一句的解析。先学习一下别人的文章,吃透源码的流程,日后有能力了再逐句撸。 源码的乐趣就在于首先能明白为什么我......
  • lxml案例~豆瓣版生日星空图片下载的源码
    有不少小伙伴反应,昨天更新的NASA的源码在运行的时候出错了,出现:其实小编当时也遇到了这个错误,当时去网上搜了下说是可能会和网络有问题,因为网站本身就是个国外的网站,后来增加......
  • Ubuntu 22.04 搭建编译Android源码环境
    环境准备操作系统编译Android源码需要一个区分文件大小写的系统环境,一般使用Ubuntu,可以采用单独安装Ubuntu、虚拟机等形式。这里使用VMware虚拟机的形式,具体安装过程省略......
  • 以太坊源码阅读---一笔交易从生到死(一) txpool
      markdown太难写了记不住。跑到博客园来写写今年还好不是原地踏步的一年,最近在家办公工作转成半个区块链安全工程师(依旧不热爱这个行业,但是区块链技术还是挺有意思的......
  • 我的第一款安卓原生游戏之万变塔防(第二章)
    由于生活上的一些琐事吧。其实吧,不是生活上的琐事的。只是,目前心情不是很好,所以打算暂时搁置这个项目。包括我那款仙道无尽的游戏开发,也一同搁置了。可能有些人会问,那什么时......
  • 互联网医院系统源码开发,互联网医院系统的发展趋势是怎样的呢?
    为了缓解患者就医难的问题,很多医院建立了互联网医院系统,不但可以利用图文、视频等方式为患者提供咨询类的医疗服务,还可以应用线上诊断,开具处方,在线药店商城拿药,快递到家等等......
  • Vue3源码阅读梳理
    简单代码例子const{createApp,defineComponent,computed,watch,ref,reactive,effect}=Vueconstapp=createApp({components:[],template:`<div......
  • 修改内核源码绕过反调试检测(Android10)
    一、Android反调试     反调试在代码保护中扮演着非常重要的角色,虽然不能完全阻止攻击者,但是能加大攻击者的分析时间成本。目前绝大多数Androidapp都加固了,为了防......
  • 解密随机数生成器(二)——从java源码看线性同余算法
    RandomJava中的Random类生成的是伪随机数,使用的是48-bit的种子,然后调用一个linearcongruentialformula线性同余方程(DonaldKnuth的编程艺术的3.2.1节)如果两个Random实例使......