网络资源模板--Android Studio 实现简易记事本App
目录
一、项目演示
二、项目测试环境
三、项目详情
四、完整的项目源码
一、项目演示
网络资源模板--基于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"><RelativeLayoutandroid: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"><ImageViewandroid:id="@+id/image_back"android:layout_width="20dp"android:layout_height="20dp"android:layout_centerVertical="true"android:src="@drawable/ic_back" /><TextViewandroid: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" /><ImageViewandroid: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><EditTextandroid: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" /><Buttonandroid: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>
修改页面

-
内容检查:
- 使用
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(); // 结束活动}
四、完整的项目源码
👇👇👇👇👇快捷获取方式👇👇👇👇👇
相关文章:
网络资源模板--Android Studio 实现简易记事本App
目录 一、项目演示 二、项目测试环境 三、项目详情 四、完整的项目源码 一、项目演示 网络资源模板--基于Android studio 实现的简易记事本App 二、项目测试环境 三、项目详情 首页 创建一个空的笔记本列表 mNotebookList。使用该列表和指定的布局资源 item_notebook 创建…...
根据Vue对比来深入学习React 下 props 组件传值 插槽 样式操作 hooks 高阶组件 性能优化
文章目录 函数组件的特点props组件间的传值父传子看上例子传父兄弟组件传值祖先组件传值 插槽基础插槽具名插槽作用域插槽 样式操作**CSS Modules** 生命周期useRef常用hookuseStateuseEffectuseContextuseReduceruseMemouseCallback 高阶组件什么时候使用 react性能问题和优化…...
HTML(六)超链接
HTML讲解(一)body部分_html body-CSDN博客 <!DOCTYPE html> <html><head><meta charset"UTF-8" /><title>title</title> </head><body><a href"https://blog.csdn.net/2301_8034953…...
【Coroutines】Implement Lua Coroutine by Kotlin - 2
Last Chapter Link 文章目录 Symmetric CoroutinesNon-Symmetric Coroutine SampleSymmetric Coroutine SampleHow to Implement Symmetric CoroutinesWonderful TricksCode DesignTail Recursion OptimizationFull Sources Symmetric Coroutines in last blog, we have talk…...
java计算机毕设课设—扫雷游戏(附源码、文章、相关截图、部署视频)
这是什么系统? 资源获取方式再最下方(本次10月份活动福利,免费提供下载,自行到对应的方式1下载,csdn的0积分下载) java计算机毕设课设—扫雷游戏(附源码、文章、相关截图、部署视频) 基于Java的扫雷游戏…...
AndroidLogger 使用问题
Q1:解压zip后,启动Notepad未看到AndroidLogger工具栏 请检查plugins下安装位置是否正确,必须与下图一致,再确认Notepad 是否为 x64 ? Q2:使用 adb 可以显示已连接,但是获取不到日志 暂时不确定问…...
数据库常见面试
8道面试题 目录 目录 7道面试题 1.怎样进行sql优化 4、group by优化 5、limit优化 6、count优化 7、update优化 2.。怎样查看sql执行情况呢(哪个关键字),说说你对这个关键字的认识 4) possible_key: 5) key 3.说说你对innodb和 myisam的理解 …...
boxplot 绘制箱线图,添加数据点
先看效果图 import matplotlib.pyplot as plt #! 解决不显示的问题:中文设置为宋体格式 plt.rcParams[font.family] ["Times New Roman", SimSun]def plot_boxplot(data_list, out_file, x_custom_labels):# 画图fig, ax plt.subplots(figsize(90, 6…...
用sdkman管理多个jdk切换
前言 最近项目前后端进行升级,需要在jdk8和jdk17两个版本切换。最简单的是通过手动切换,但切换过程太繁琐,修改环境变量,达到切换目的。于是尝试其它解决方案,最终确实使用sdkman工具。 sdkman 是一款面向Java开发者的…...
【AIGC】ChatGPT提示词Prompt高效编写模式:结构化Prompt、提示词生成器与单样本/少样本提示
💯前言 在如今AI技术迅猛发展的背景下,尽管像ChatGPT这样的大型语言模型具备强大的生成能力,但它们的输出质量有时仍难以完全满足我们的预期。为了让ChatGPT生成更加准确、可靠的内容,掌握高效的Prompt编写技巧变得尤为重要。本文…...
反调式实战(有道翻译窗口弹出)
1.添加脚本断点实现源码获取 2.Function构造器构造debugger 因为是窗口被弹出的情况,所以window.closefunction()构造debugger。 3.定位到影响弹出的JavaScript代码片段 反调试思想:置空和替换,所以将其JavaScript进行注释或者删除。 这里主…...
verilog端口使用注意事项
下图存在组合逻辑反馈环,即组合逻辑的输出反馈到输入(赋值的左右2边存在相同的信号),此种情况会造成系统不稳定。比如在data_in20的情况下,在data_out0 时候,输出的数据会反馈到输入,输入再输出,从而造成不…...
Docker常用命令大全汇总
Docker是一种流行的容器化平台,可以在一个独立的、隔离的环境中构建、部署和运行应用程序。了解Docker常用命令可以帮助我们更高效地管理容器,快速开发和部署应用。本文将整理一系列Docker的常用命令,便于日常使用和学习。 1 Docker基础命令 1.1 启动/停止/重启docker # …...
LVS-DR+Keepalived 高可用群集部署
LVS-DRKeepalived 高可用群集部署 Keepalived 的工作原理LVSKeepalived 高可用群集部署配置负载调度器(主、备相同)关闭防火墙和核心防护及准备IPVS模块配置keeplived(主、备DR 服务器上都要设置)启动 ipvsadm 服务调整 proc 响应…...
【elasticsearch】安装和启动
启动 Elasticsearch 并验证其是否成功运行通常涉及以下步骤: 下载和安装 Elasticsearch: 访问 Elasticsearch 官方网站下载页面:https://www.elastic.co/guide/en/elasticsearch/reference/current/install-elasticsearch.html根据你的操作系…...
Golang 逃逸分析(Escape Analysis)理解与实践篇
Golang 逃逸分析(Escape Analysis)理解与实践篇 文章目录 1.逃逸分析2.相关知识(栈、堆、GC分析)3.逃逸分析综合-实践 demo 逃逸分析(Escape Analysis)是编译器在编译期进行的一项优化技术,是Gl…...
React入门 9:React Router
1. 什么是路由 路由(routing)就是通过互联的网络把信息从源地址传输到目的地址的活动。 以上是中文维基百科对路由的解释。通俗的来讲,把一个地方的信息传输到他想去的目的地的过程,就叫路由。 2. 用代码解释路由 需求:…...
MATLAB基础应用精讲-【数模应用】Bland-Altman图(附python和R语言代码实现)
目录 前言 几个高频面试题目 Bland-altman图:如何改变y轴 算法原理 Bland-Altman一致性分析 一致性界限 1. 背景介绍 2. Bland-Altman 法 3. batplot 命令介绍 4. 应用实例 Prism GraphPad实现Bland-Altman图 1.输入数据 2.从数据表中选择Bland-Altman分析 3.检…...
ARM/Linux嵌入式面经(四一):中兴面经
1. 请介绍一下您在嵌入式系统开发中的项目经验。 在嵌入式系统开发领域,我积累了丰富的项目经验,这些经验不仅锻炼了我的技术能力,也让我对嵌入式系统的设计和实现有了更深入的理解。以下是我参与的一个具有代表性的嵌入式系统开发项目的详细介绍: 项目背景 该项目是为一…...
鸿蒙虚拟运行环境
加一个环境变量:%SystemRoot%\System32\Wbem pushd "%~dp0" dir /b %SystemRoot%\servicing\Packages\*Hyper-V*.mum >hyper-v.txt for /f %%i in (findstr /i . hyper-v.txt 2^>nul) do dism /online /norestart /add-package:"%SystemRoot%…...
华为设备IPv6配置保姆级教程:从接口地址到静态路由,一次搞定
华为设备IPv6实战配置指南:从零搭建下一代网络架构 当企业网络从IPv4向IPv6迁移时,华为设备的配置逻辑与操作细节往往成为新手工程师的第一道门槛。不同于传统IPv4网络,IPv6的地址结构、邻居发现机制和路由配置都有其独特之处。本文将基于华为…...
如何用NHSE动物森友会存档编辑器快速打造梦想岛屿:终极完整指南
如何用NHSE动物森友会存档编辑器快速打造梦想岛屿:终极完整指南 【免费下载链接】NHSE Animal Crossing: New Horizons save editor 项目地址: https://gitcode.com/gh_mirrors/nh/NHSE 还在为《集合啦!动物森友会》中收集稀有物品而烦恼吗&#…...
终极破解工具:Cursor Pro永久免费使用完整方案,轻松绕过试用限制
终极破解工具:Cursor Pro永久免费使用完整方案,轻松绕过试用限制 【免费下载链接】cursor-free-vip [Support 0.45](Multi Language 多语言)自动注册 Cursor Ai ,自动重置机器ID , 免费升级使用Pro 功能: Y…...
蜡笔变蜡烛:DIY分层香薰蜡烛的材料原理与制作实践
1. 项目概述:当蜡笔遇见蜡烛,一次关于气味与色彩的记忆重塑不知道你有没有过这样的体验:打开一盒崭新的蜡笔,那股混合着油脂、黏土与淡淡皂感的独特气味扑面而来,瞬间就能将你拉回铺满画纸的童年午后。Crayola蜡笔的官…...
基于LangBot框架快速构建智能对话机器人:从工具集成到RAG应用实战
1. 项目概述:一个能“听懂人话”的智能对话机器人如果你正在寻找一个能快速搭建、高度定制,并且能真正理解你意图的智能对话机器人,那么langbot-app/LangBot这个项目绝对值得你花时间深入研究。它不是一个简单的聊天接口封装,而是…...
终极指南:3分钟掌握Deepin Boot Maker,轻松制作Linux启动盘
终极指南:3分钟掌握Deepin Boot Maker,轻松制作Linux启动盘 【免费下载链接】deepin-boot-maker 项目地址: https://gitcode.com/gh_mirrors/de/deepin-boot-maker 你是否曾经因为复杂的命令行操作而对Linux系统安装望而却步?或者面对…...
Go语言工厂模式:对象创建封装
Go语言工厂模式:对象创建封装 1. 简单工厂 type Product interface {Operation() string }type ConcreteProductA struct{}func (p *ConcreteProductA) Operation() string {return "Product A" }type ConcreteProductB struct{}func (p *ConcreteProduct…...
前端开发者如何构建个人工具箱:从工具函数到配置片段的效率实践
1. 项目概述:一个前端开发者的“百宝箱”仓库在多年的前端开发生涯中,我养成了一个习惯:每当遇到一个精巧的解决方案、一个高频使用的工具函数,或者一个值得反复琢磨的配置片段,我都会把它们收集起来。久而久之&#x…...
InfluxDB实战:数据备份恢复的进阶策略与生产环境避坑指南
1. InfluxDB备份恢复的核心概念 第一次接触InfluxDB备份时,我也被各种术语搞得晕头转向。后来在实际项目中踩过几次坑才明白,InfluxDB的备份主要分为两类:元数据备份和数据库数据备份。元数据就像是你手机的通讯录,记录着所有用户…...
微软UFO项目:基于视觉大模型的GUI自动化智能体实战解析
1. 项目概述:当“全能”AI助手遇见复杂任务编排 最近在AI应用开发圈里,一个来自微软研究院的项目“UFO”引起了我的注意。这名字听起来挺科幻,全称是“UI-Focused Agent”,直译过来是“专注于用户界面的智能体”。但别被这个直白的…...
