目录
一、项目演示
网络资源模板--基于Android studio 实现的简易记事本App
二、项目测试环境
三、项目详情
首页
- 创建一个空的笔记本列表
mNotebookList
。 - 使用该列表和指定的布局资源
item_notebook
创建适配器mAdapter
。 - 设置 RecyclerView 的布局管理器为线性布局。
- 将适配器设置到 RecyclerView 上。
- 设置空视图,当列表没有数据时显示
view_no_data
视图。
mNotebookList = new ArrayList<>(); // 初始化笔记本列表
mAdapter = new NotebookAdapter(R.layout.item_notebook, mNotebookList); // 创建适配器
recyclerView.setLayoutManager(new LinearLayoutManager(this)); // 设置布局管理器
recyclerView.setAdapter(mAdapter); // 设置适配器
mAdapter.setEmptyView(R.layout.view_no_data); // 设置空视图
添加页面
-
根布局:
- 使用
RelativeLayout
作为根布局,宽高设置为填充父布局。
- 使用
-
标题栏:
- 包含一个
RelativeLayout
,高度为 50dp,背景色为主题色。 - 里面有三个子视图:
- 一个返回按钮
ImageView
,显示一个后退图标。 - 一个标题
TextView
,显示应用名称,居中显示。 - 一个删除按钮
ImageView
,位于右侧,显示一个删除图标。
- 一个返回按钮
- 包含一个
-
输入框:
- 一个
EditText
用于输入笔记内容,设置了提示文本“请输入内容...”,并在标题栏下方、保存按钮上方显示。
- 一个
-
保存按钮:
- 一个
Button
,宽度填充父布局,位于底部,背景为自定义 drawable,文本为“保存”。
- 一个
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@id/container"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:orientation="vertical">
<RelativeLayout
android:id="@id/layout_title"
android:layout_width="fill_parent"
android:layout_height="50dp"
android:background="@color/color_theme"
android:orientation="horizontal"
android:paddingHorizontal="@dimen/dp_10"
android:paddingLeft="@dimen/dp_10"
android:paddingRight="@dimen/dp_10">
<ImageView
android:id="@+id/image_back"
android:layout_width="20dp"
android:layout_height="20dp"
android:layout_centerVertical="true"
android:src="@drawable/ic_back" />
<TextView
android:id="@+id/tv_title"
android:layout_width="wrap_content"
android:layout_height="fill_parent"
android:layout_centerInParent="true"
android:gravity="center"
android:text="@string/app_name"
android:textColor="@color/White"
android:textSize="15sp" />
<ImageView
android:id="@+id/image_delete"
android:layout_width="20dp"
android:layout_height="20dp"
android:layout_alignParentRight="true"
android:layout_centerVertical="true"
android:src="@drawable/ic_delete" />
</RelativeLayout>
<EditText
android:id="@+id/edit_notebook"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:layout_above="@id/btn_save"
android:layout_below="@id/layout_title"
android:layout_margin="@dimen/dp_10"
android:background="@color/White"
android:gravity="top"
android:hint="请输入内容..."
android:padding="@dimen/dp_10"
android:textSize="15sp" />
<Button
android:id="@+id/btn_save"
android:layout_width="fill_parent"
android:layout_height="@dimen/dp_40"
android:layout_alignParentBottom="true"
android:layout_margin="@dimen/dp_10"
android:background="@drawable/bg_login"
android:text="保存"
android:textColor="@color/White"
android:textSize="15sp" />
</RelativeLayout>
这段XML代码描述了一个基本的Android布局界面,主要包含了一个相对布局(RelativeLayout)和其中的一些子视图组件。下面是对代码中各部分的详细介绍:
-
<RelativeLayout> 标签: 这是根布局标签,用于包裹整个布局内容。它设置了宽度为屏幕宽度的填充父级(fill_parent)和高度为填充父级,以及垂直方向布局。
-
<RelativeLayout> 标签: 这是内部的相对布局,用于包含标题栏和正文内容。它设置了宽度为屏幕宽度的填充父级和高度为50dp,并且背景颜色为主题颜色。
-
<ImageView> 标签: 这是一个图像视图,用于显示返回图标。设置了宽度为20dp、高度为20dp,并居中垂直方向。
-
<TextView> 标签: 这是一个文本视图,用于显示标题文本。设置了包裹内容宽度、填充父级高度,并居中于父级布局。
-
<ImageView> 标签: 这是另一个图像视图,用于显示删除图标。设置了宽度为20dp、高度为20dp,并位于父级布局的右侧。
-
<EditText> 标签: 这是一个编辑文本框,用于用户输入内容。设置了填充父级宽度和高度、位于保存按钮上方和标题栏下方、以及一些边距和背景颜色等属性。
-
<Button> 标签: 这是一个按钮组件,用户可以点击保存操作。设置了填充父级宽度、高度为40dp、位于父级布局底部、以及一些边距、背景颜色、文本内容等属性。
这个布局主要包含了一个标题栏(包含返回图标、标题文本和删除图标)、一个编辑文本框(用于用户输入内容)和一个保存按钮(用户保存输入内容)。整体布局简洁明了,适合用于简单的笔记本应用界面设计。
修改页面
-
内容检查:
- 使用
TextUtils.isEmpty()
方法检查输入内容是否为空。如果为空,显示一个短暂的提示 (Toast
),并返回,不执行后续保存逻辑。
- 使用
-
更新已存在的笔记本:
- 如果
mNotebookBean
不为空,说明是对已有笔记本进行编辑。更新其内容和编辑时间,然后调用mDBManager.updateNotebook(mNotebookBean)
方法更新数据库中的记录。
- 如果
-
新建笔记本:
- 如果
mNotebookBean
为空,创建一个新的NotebookBean
对象,设置内容和编辑时间,然后调用mDBManager.insertNotebook(newNotebook)
方法将新记录插入数据库。
- 如果
-
结束活动:
- 最后,设置结果为
RESULT_OK
,并调用finish()
方法结束当前活动,返回到之前的界面。
- 最后,设置结果为
private void save(String content) {
if (TextUtils.isEmpty(content)) {
Toast.makeText(this, "您还未输入内容", Toast.LENGTH_SHORT).show(); // 提示用户输入内容
return;
}
if (mNotebookBean != null) {
// 更新已存在的笔记本内容
mNotebookBean.setContent(content);
mNotebookBean.setEditTime(System.currentTimeMillis()); // 更新编辑时间
mDBManager.updateNotebook(mNotebookBean); // 更新数据库
} else {
// 新建笔记本
NotebookBean newNotebook = new NotebookBean();
newNotebook.setContent(content);
newNotebook.setEditTime(System.currentTimeMillis()); // 设置编辑时间
mDBManager.insertNotebook(newNotebook); // 插入数据库
}
setResult(RESULT_OK); // 设置结果为成功
finish(); // 结束活动
}
该方法是一个私有方法,用于保存笔记本内容。首先,它会检查传入的内容是否为空,如果为空,则会显示一个短暂的Toast提示用户输入内容,并立即返回,不执行后续操作。
接着,方法会检查是否已存在笔记本实例mNotebookBean。如果存在,则会更新该笔记本的内容和编辑时间,并通过mDBManager来更新数据库中的对应条目。
如果不存在笔记本实例mNotebookBean,则表示需要新建一个笔记本。创建一个新的NotebookBean实例,设置内容和编辑时间,并通过mDBManager将其插入到数据库中。
最后,设置操作结果为成功(RESULT_OK),并结束当前活动。
总之,该方法实现了保存笔记本内容的功能,包括更新已有笔记本和新建笔记本两种情况。
四、完整的项目源码
👇👇👇👇👇快捷获取方式👇👇👇👇👇