一.学习内容
- 数据库(SQLite)与列表(RecyclerView)的结合
- 使用记事的增、删、改、查
- 列表的更新
- RecyclerView不同视图(Linear和Grid)的绑定实现一个搜索框:SearchView的使用
二.学习过程
1.布局设计
三,实现的效果
四 遇到的问题
1.Serializable主要作用将类的实例持久化保存,实现序列化
·可序列化的Java对象必须实现java.io.Serializable接口
·类似Serializable这样的空接口被称为“标记接口”(Marker Interface)
·反序列化时不调用构造方法
·可设置serialVersionUID作为版本号(非必需)
. Java的序列化机制仅适用于Java,如果需要与其它语言交换数据,必须使用通用的序列化方法,例如JSON
2.适配器的作用;能够把所携带的数据映射(或说是填充)到用户界面上
3.安卓中如何查看数据库表新建成功
4.数据传递 要先获取到数据 再传入视图 最后再有点击事件
5.TextUtils 这个类 在android api 架构包 中 是主要来处理一些文本类的字符串信息的
spfUtils 存储键值对的
6.什么时候用SQLiteOpenHelper 在本例子中 在添加记事本的时候
就需要在此类中 添加内容 标题和创建时间 数据库设置好 再在addactivity里面进行引用
打开数据库,又牵涉到了不少细节。比如:
1. 这个数据库是否存在?如果不存在,就要考虑先创建数据库,创建各种数据表。
2. 这个数据库是否需要升级,比如目前的数据库结构已经不能满足我们的需求了,我们需要更改数据库的结构,这个时候就要先升级数据库,更新数据库的结构。
3. 这个数据库是否之前已经打开?一般来说,我们操作数据库结束之后,需要关闭数据库,以节约资源。但是如果我们之前打开的数据库还要继续使用,这时候再执行打开操作时,直接返回这个数据库就行了。
这些细节实现起来,还是挺繁琐的,然而这些逻辑都是套路,一招鲜吃遍天,不需要每次都从头写一遍。于是,是时候SQLiteOpenHelper出场了。
SQLiteOpenHelper把打开数据库的一系列需要考虑到的细节逻辑都封装了起来,这也是为什么包含了Open这个单词的原因了。因为SQLiteOpenHelper的主要工作就是把打开数据库的逻辑帮我们实现了。
7.Cursor.moveToFirst()和Cursor.moveToNext()的疑惑
原来查询得到的cursor是指向第一条记录之前的,因此查询得到cursor后第一次调用moveToFirst或moveToNext都可以将cursor移动到第一条记录上。
源码中这些moveXXX其实都是通过moveToPosition来实现的,而记录position的是一个整型变量mPos。当moveXXXX返回false的时候,mPos会被置为-1,也就是回到了初始状态,指向第一条记录之前。
8.游标查询数据库信息时,可先获取列号再获取列的信息
9.写完数据库后去添加数据 刷新后无数据 是因为生命周期出现了问题
添加完毕后再执行已经不会再去oncreate方法了 需要去onresume 方法
10.数据列表不显示 刷新后 新添加的信息不显示 并循环写死的text(大问题) 这个真的要重视 每个id 对应的功能和位置 不然会获取到信息为null
11.ViewHolder的使用场景
ViewHolder通常出现在适配器里,为的是listview滚动的时候快速设置值,而不必每次都重新创建很多对象,从而提升性能
12.安卓LayoutInflater详解
具体作用: 1、对于一个没有被载入或者想要动态载入的界面,都需要使用LayoutInflater.inflate ()来载入; 2、对于一个已经载入的界面,就可以使用Activiyt.findViewById ()方法来获得其中的界面元素。
13.加入菜单和图标
菜单:在主方法中写上onCreateOptionsMenu方法
图标;
13.查询语句中的参数解析
public Cursor query (String table, String[] columns, String selection, String[] selectionArgs,
String groupBy, String having, String orderBy, String limit)
args 就是赋值 相当于where