一.学习内容

  1. 数据库(SQLite)与列表(RecyclerView)的结合
  2. 使用记事的增、删、改、查
  3. 列表的更新
  4. RecyclerView不同视图(Linear和Grid)的绑定实现一个搜索框:SearchView的使用

二.学习过程

1.布局设计

android简易记事本 android 简单记事本开发(一)_序列化

 

android简易记事本 android 简单记事本开发(一)_序列化_02

 

 三,实现的效果

android简易记事本 android 简单记事本开发(一)_android_03

android简易记事本 android 简单记事本开发(一)_android_04

android简易记事本 android 简单记事本开发(一)_序列化_05

android简易记事本 android 简单记事本开发(一)_序列化_06

四 遇到的问题

1.Serializable主要作用将类的实例持久化保存,实现序列化

·可序列化的Java对象必须实现java.io.Serializable接口
·类似Serializable这样的空接口被称为“标记接口”(Marker Interface)
·反序列化时不调用构造方法
·可设置serialVersionUID作为版本号(非必需)
. Java的序列化机制仅适用于Java,如果需要与其它语言交换数据,必须使用通用的序列化方法,例如JSON

2.适配器的作用;能够把所携带的数据映射(或说是填充)到用户界面上 

3.安卓中如何查看数据库表新建成功


4.数据传递 要先获取到数据 再传入视图 最后再有点击事件

android简易记事本 android 简单记事本开发(一)_序列化_07

 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.游标查询数据库信息时,可先获取列号再获取列的信息

android简易记事本 android 简单记事本开发(一)_SQL_08

 9.写完数据库后去添加数据 刷新后无数据 是因为生命周期出现了问题

添加完毕后再执行已经不会再去oncreate方法了 需要去onresume 方法

10.数据列表不显示 刷新后 新添加的信息不显示 并循环写死的text(大问题) 这个真的要重视 每个id 对应的功能和位置 不然会获取到信息为null

android简易记事本 android 简单记事本开发(一)_android简易记事本_09

11.ViewHolder的使用场景

ViewHolder通常出现在适配器里,为的是listview滚动的时候快速设置值,而不必每次都重新创建很多对象,从而提升性能

12.安卓LayoutInflater详解

具体作用: 1、对于一个没有被载入或者想要动态载入的界面,都需要使用LayoutInflater.inflate ()来载入; 2、对于一个已经载入的界面,就可以使用Activiyt.findViewById ()方法来获得其中的界面元素。

13.加入菜单和图标

菜单:在主方法中写上onCreateOptionsMenu方法

android简易记事本 android 简单记事本开发(一)_序列化_10

 图标; 

android简易记事本 android 简单记事本开发(一)_SQL_11

 13.查询语句中的参数解析

public Cursor   query  (String table, String[] columns, String selection, String[] selectionArgs, 
 String groupBy, String having, String orderBy, String limit)

args 就是赋值 相当于where

android简易记事本 android 简单记事本开发(一)_序列化_12