当前位置: 首页 > news >正文

网络资源模板--Android Studio 实现简易记事本App

目录

一、项目演示

二、项目测试环境

三、项目详情

四、完整的项目源码 


一、项目演示

网络资源模板--基于Android studio 实现的简易记事本App

二、项目测试环境

三、项目详情

首页

  1. 创建一个空的笔记本列表 mNotebookList
  2. 使用该列表和指定的布局资源 item_notebook 创建适配器 mAdapter
  3. 设置 RecyclerView 的布局管理器为线性布局。
  4. 将适配器设置到 RecyclerView 上。
  5. 设置空视图,当列表没有数据时显示 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); // 设置空视图

添加页面

  1. 根布局

    • 使用 RelativeLayout 作为根布局,宽高设置为填充父布局。
  2. 标题栏

    • 包含一个 RelativeLayout,高度为 50dp,背景色为主题色。
    • 里面有三个子视图:
      • 一个返回按钮 ImageView,显示一个后退图标。
      • 一个标题 TextView,显示应用名称,居中显示。
      • 一个删除按钮 ImageView,位于右侧,显示一个删除图标。
  3. 输入框

    • 一个 EditText 用于输入笔记内容,设置了提示文本“请输入内容...”,并在标题栏下方、保存按钮上方显示。
  4. 保存按钮

    • 一个 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>

修改页面

  1. 内容检查

    • 使用 TextUtils.isEmpty() 方法检查输入内容是否为空。如果为空,显示一个短暂的提示 (Toast),并返回,不执行后续保存逻辑。
  2. 更新已存在的笔记本

    • 如果 mNotebookBean 不为空,说明是对已有笔记本进行编辑。更新其内容和编辑时间,然后调用 mDBManager.updateNotebook(mNotebookBean) 方法更新数据库中的记录。
  3. 新建笔记本

    • 如果 mNotebookBean 为空,创建一个新的 NotebookBean 对象,设置内容和编辑时间,然后调用 mDBManager.insertNotebook(newNotebook) 方法将新记录插入数据库。
  4. 结束活动

    • 最后,设置结果为 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讲解&#xff08;一&#xff09;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计算机毕设课设—扫雷游戏(附源码、文章、相关截图、部署视频)

这是什么系统&#xff1f; 资源获取方式再最下方&#xff08;本次10月份活动福利&#xff0c;免费提供下载&#xff0c;自行到对应的方式1下载&#xff0c;csdn的0积分下载&#xff09; java计算机毕设课设—扫雷游戏(附源码、文章、相关截图、部署视频) 基于Java的扫雷游戏…...

AndroidLogger 使用问题

Q1&#xff1a;解压zip后&#xff0c;启动Notepad未看到AndroidLogger工具栏 请检查plugins下安装位置是否正确&#xff0c;必须与下图一致&#xff0c;再确认Notepad 是否为 x64 &#xff1f; Q2&#xff1a;使用 adb 可以显示已连接&#xff0c;但是获取不到日志 暂时不确定问…...

数据库常见面试

8道面试题 目录 目录 7道面试题 1.怎样进行sql优化 4、group by优化 5、limit优化 6、count优化 7、update优化 2.。怎样查看sql执行情况呢(哪个关键字)&#xff0c;说说你对这个关键字的认识 4) possible_key&#xff1a; 5) key 3.说说你对innodb和 myisam的理解 …...

boxplot 绘制箱线图,添加数据点

先看效果图 import matplotlib.pyplot as plt #! 解决不显示的问题&#xff1a;中文设置为宋体格式 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切换

前言 最近项目前后端进行升级&#xff0c;需要在jdk8和jdk17两个版本切换。最简单的是通过手动切换&#xff0c;但切换过程太繁琐&#xff0c;修改环境变量&#xff0c;达到切换目的。于是尝试其它解决方案&#xff0c;最终确实使用sdkman工具。 sdkman 是一款面向Java开发者的…...

【AIGC】ChatGPT提示词Prompt高效编写模式:结构化Prompt、提示词生成器与单样本/少样本提示

&#x1f4af;前言 在如今AI技术迅猛发展的背景下&#xff0c;尽管像ChatGPT这样的大型语言模型具备强大的生成能力&#xff0c;但它们的输出质量有时仍难以完全满足我们的预期。为了让ChatGPT生成更加准确、可靠的内容&#xff0c;掌握高效的Prompt编写技巧变得尤为重要。本文…...

反调式实战(有道翻译窗口弹出)

1.添加脚本断点实现源码获取 2.Function构造器构造debugger 因为是窗口被弹出的情况&#xff0c;所以window.closefunction()构造debugger。 3.定位到影响弹出的JavaScript代码片段 反调试思想&#xff1a;置空和替换&#xff0c;所以将其JavaScript进行注释或者删除。 这里主…...

verilog端口使用注意事项

下图存在组合逻辑反馈环&#xff0c;即组合逻辑的输出反馈到输入(赋值的左右2边存在相同的信号)&#xff0c;此种情况会造成系统不稳定。比如在data_in20的情况下&#xff0c;在data_out0 时候&#xff0c;输出的数据会反馈到输入&#xff0c;输入再输出&#xff0c;从而造成不…...

Docker常用命令大全汇总

Docker是一种流行的容器化平台,可以在一个独立的、隔离的环境中构建、部署和运行应用程序。了解Docker常用命令可以帮助我们更高效地管理容器,快速开发和部署应用。本文将整理一系列Docker的常用命令,便于日常使用和学习。 1 Docker基础命令 1.1 启动/停止/重启docker # …...

LVS-DR+Keepalived 高可用群集部署

LVS-DRKeepalived 高可用群集部署 Keepalived 的工作原理LVSKeepalived 高可用群集部署配置负载调度器&#xff08;主、备相同&#xff09;关闭防火墙和核心防护及准备IPVS模块配置keeplived&#xff08;主、备DR 服务器上都要设置&#xff09;启动 ipvsadm 服务调整 proc 响应…...

【elasticsearch】安装和启动

启动 Elasticsearch 并验证其是否成功运行通常涉及以下步骤&#xff1a; 下载和安装 Elasticsearch&#xff1a; 访问 Elasticsearch 官方网站下载页面&#xff1a;https://www.elastic.co/guide/en/elasticsearch/reference/current/install-elasticsearch.html根据你的操作系…...

Golang 逃逸分析(Escape Analysis)理解与实践篇

Golang 逃逸分析&#xff08;Escape Analysis&#xff09;理解与实践篇 文章目录 1.逃逸分析2.相关知识&#xff08;栈、堆、GC分析&#xff09;3.逃逸分析综合-实践 demo 逃逸分析&#xff08;Escape Analysis&#xff09;是编译器在编译期进行的一项优化技术&#xff0c;是Gl…...

React入门 9:React Router

1. 什么是路由 路由&#xff08;routing&#xff09;就是通过互联的网络把信息从源地址传输到目的地址的活动。 以上是中文维基百科对路由的解释。通俗的来讲&#xff0c;把一个地方的信息传输到他想去的目的地的过程&#xff0c;就叫路由。 2. 用代码解释路由 需求&#xff1a…...

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. 请介绍一下您在嵌入式系统开发中的项目经验。 在嵌入式系统开发领域,我积累了丰富的项目经验,这些经验不仅锻炼了我的技术能力,也让我对嵌入式系统的设计和实现有了更深入的理解。以下是我参与的一个具有代表性的嵌入式系统开发项目的详细介绍: 项目背景 该项目是为一…...

鸿蒙虚拟运行环境

加一个环境变量&#xff1a;%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%…...

【FastAPI 2.0流式AI响应终极指南】:20年架构师亲授异步SSE/Chunked Transfer实战避坑清单

第一章&#xff1a;FastAPI 2.0流式AI响应面试概览在现代AI应用开发中&#xff0c;面试场景下的实时交互体验正成为关键评估维度。FastAPI 2.0 引入了对原生异步流式响应&#xff08;StreamingResponse&#xff09;的深度优化&#xff0c;支持 Server-Sent Events&#xff08;S…...

手把手教你用YOLOv5训练自己的交通标志数据集(从LabelImg标注到模型部署)

从零构建YOLOv5交通标志检测器的实战指南 在自动驾驶和智能交通系统快速发展的今天&#xff0c;准确识别道路标志已成为计算机视觉领域的重要应用场景。不同于传统图像处理方法&#xff0c;基于深度学习的目标检测技术能够适应复杂环境变化&#xff0c;而YOLOv5以其卓越的速度-…...

SRS + FFmpeg WebRTC 循环推流环境搭建

SRS FFmpeg WebRTC 循环推流环境搭建指南 本指南介绍如何使用 Docker Compose 快速搭建一个基于 SRS (Simple Realtime Server) 的流媒体测试环境。 推流协议&#xff1a;RTMP (FFmpeg 模拟推流)拉流协议&#xff1a;WebRTC (低延迟播放)特性&#xff1a;视频循环播放、不保存…...

OpenClaw多通道管理:GLM-4.7-Flash同时对接飞书与钉钉的配置技巧

OpenClaw多通道管理&#xff1a;GLM-4.7-Flash同时对接飞书与钉钉的配置技巧 1. 为什么需要多通道管理&#xff1f; 上周我接到一个技术咨询需求&#xff1a;一个小型内容团队需要同时在飞书和钉钉两个平台上接收AI助手服务。他们的编辑用飞书&#xff0c;运营用钉钉&#xf…...

梦行云软件——溯源系统-》企业方》产品溯源管理》员工管理

梦行云软件——溯源系统-》企业方》产品溯源管理》员工管理 湖南梦辰软件开发有限公司是立足怀化、服务全国的数字化技术服务商。公司拥有19项软件著作权及多项自主知识产权。专注于Web系统、APP与小程序定制开发&#xff0c;提供全链路数字化解决方案。以合规先行与稳定交付为…...

SAS(Serial Attached SCSI)在企业级存储中的核心设计与实战解析

1. SAS技术在企业级存储中的核心价值 如果你拆开过企业级存储设备&#xff0c;大概率会看到那些带着蓝色或黑色连接器的硬盘背板——这就是SAS技术的战场。作为存储架构师&#xff0c;我经手过的全闪存阵列和磁盘柜里&#xff0c;90%的核心连接都依赖SAS协议。和消费级SATA相比…...

如何让实验室管理“更简单”?——King’s LIMS以灵活与智能,重构高效运营新范式

在日常实验室管理中&#xff0c;流程繁琐、数据难溯源、报告生成低效、多场景管控混乱等问题&#xff0c;常成为拖慢运营节奏、抬升运维成本的“隐形阻力”。要打破管理困局、实现轻量化高效运维&#xff0c;选对数字化工具是关键。然而&#xff0c;在选择LIMS的过程中&#xf…...

Simulink整车控制器vcu应用层模型,实车在用的,支持仿真和生成 文件分类明确

Simulink整车控制器vcu应用层模型&#xff0c;实车在用的&#xff0c;支持仿真和生成 文件分类明确&#xff0c;每个普通功能和核心功能建有单独的库&#xff0c;存放在文件夹里。 有相应的表格&#xff0c;描述了信号的意思。搞汽车电子的兄弟都知道&#xff0c;整车控制器&am…...

UE4.62生成sln时失败:Missing .../DotNET/UnrealBuildTool/UnrealBuildTool/UnrealBuildTool.exe

问题1&#xff1a; vs编译报错&#xff0c;以为是热加载&#xff0c;把项目的几个文件删了&#xff0c;想右键点击Generate Visual Studio Project Files重构&#xff0c;报错。 解决方法&#xff1a;: 是看m0_62179790这个博主解决的。 只要把下面这行东西添加到你自己的UE…...

OpenClaw备份方案:GLM-4-7-Flash自动加密重要文件并上传网盘

OpenClaw备份方案&#xff1a;GLM-4-7-Flash自动加密重要文件并上传网盘 1. 为什么需要自动化加密备份 去年的一次硬盘故障让我损失了三个月的项目资料&#xff0c;这件事彻底改变了我对数据安全的认知。传统备份方案要么需要手动操作&#xff08;容易遗忘&#xff09;&#…...