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

目录

一、项目演示

二、项目测试环境

三、项目详情

四、完整的项目源码 


一、项目演示

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

二、项目测试环境

三、项目详情

首页

  1. 显示笔记列表:使用 ListView 显示从数据库中查询到的笔记内容。
  2. 搜索功能:通过 SearchView 允许用户根据笔记内容进行实时搜索,过滤并更新显示的笔记列表。
  3. 添加新笔记:通过点击一个图标 (addRecord),用户可以进入 RecordActivity 界面,添加新的笔记。
  4. 删除笔记:长按某条笔记会弹出确认对话框,用户可以选择删除该笔记,删除后更新列表。
  5. 查看笔记详情:单击某条笔记会进入 RecordActivity,显示该笔记的详细信息。
  6. 数据更新:在返回主界面时会刷新笔记列表,确保显示的是最新数据。
   // 设置长按事件监听器,用于删除笔记
        listView.setOnItemLongClickListener((adapterView, view, position, id) -> {
            AlertDialog.Builder builder = new AlertDialog.Builder(NotePadActivity.this);
            builder.setMessage("是否删除此记录") // 设置对话框信息
                    .setPositiveButton("确定", (dialog, which) -> {
                        Note note = noteList.get(position); // 获取长按的笔记
                        noteList.remove(note); // 从列表中删除笔记
                        adapter.notifyDataSetChanged(); // 刷新适配器
                        new NotepadDao(NotePadActivity.this).deleteById(note.getId()); // 从数据库删除
                    })
                    .setNegativeButton("取消", (dialog, which) -> dialog.dismiss()) // 取消按钮
                    .show(); // 显示对话框
            return true;
        });

        // 设置单击事件监听器,用于查看笔记详情
        listView.setOnItemClickListener((adapterView, view, position, id) -> {
            Intent intent = new Intent(NotePadActivity.this, RecordActivity.class); // 创建意图
            Note note = noteList.get(position); // 获取被点击的笔记
            intent.putExtra("id", note.getId()); // 传递笔记ID
            intent.putExtra("content", note.getContent()); // 传递笔记内容
            intent.putExtra("noteTime", note.getNoteTime()); // 传递笔记时间
            intent.putExtra("cate", note.getCate()); // 传递分类
            intent.putExtra("tag", note.getTag()); // 传递标签
            startActivityForResult(intent, 1); // 启动新活动
        });

修改页面

开发一个 Android 应用中的 NotePadActivity 类,主要实现笔记的增、删、查功能,并使用 ListView 和 SearchView。最近,用户询问了如何解决 NullPointerException,尤其是在字符串比较时。用户展示了添加分类和标签的对话框代码,并进行了一些优化建议,包括提取通用方法、使用异常处理、在更新适配器时调用 notifyDataSetChanged(),以及确保适配器不为空。

// 显示添加分类对话框
    private void showAddCategoryDialog() {
        showAddDialog("请输入分类名称", (name) -> {
            if (TextUtils.isEmpty(name)) {
                Toast.makeText(this, "输入为空!", Toast.LENGTH_SHORT).show(); // 输入为空提示
                return;
            }
            CateDao cateDao = new CateDao(this);
            cateDao.insertCate(name); // 插入新分类
            cateArrayList = cateDao.queryCate(); // 更新分类列表
            categorySpinner.setAdapter(new ArrayAdapter<>(this, R.layout.support_simple_spinner_dropdown_item, cateArrayList)); // 更新下拉框适配器
            Toast.makeText(this, "已添加", Toast.LENGTH_SHORT).show(); // 显示添加成功提示
        });
    }

    // 显示添加标签对话框
    private void showAddTagDialog() {
        showAddDialog("请输入标签名称", (name) -> {
            if (TextUtils.isEmpty(name)) {
                Toast.makeText(this, "输入为空!", Toast.LENGTH_SHORT).show(); // 输入为空提示
                return;
            }
            TagDao tagDao = new TagDao(this);
            tagDao.insertTag(name); // 插入新标签
            tagArrayList = tagDao.queryTag(); // 更新标签列表
            tagSpinner.setAdapter(new ArrayAdapter<>(this, R.layout.support_simple_spinner_dropdown_item, tagArrayList)); // 更新下拉框适配器
            Toast.makeText(this, "已添加", Toast.LENGTH_SHORT).show(); // 显示添加成功提示
        });
    }

添加页面

  1. 笔记管理:支持新增、删除和查看笔记。
  2. 列表展示:使用 ListView 显示笔记。
  3. 搜索功能:通过 SearchView 进行笔记搜索。
  4. 分类与标签:允许用户为笔记添加分类和标签
 // 如果ID为空,执行插入操作
            notepadDao.insertData(content,
                    cateArrayList.get(categorySpinner.getSelectedItemPosition()).getContent(),
                    tagArrayList.get(tagSpinner.getSelectedItemPosition()).getContent(), time);
            Toast.makeText(this, "添加成功", Toast.LENGTH_SHORT).show(); // 显示成功提示
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    android:orientation="vertical">

    <RelativeLayout
        android:layout_width="fill_parent"
        android:layout_height="70.0dip"
        android:background="#fffb7a6a">

        <ImageView
            android:id="@+id/back"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_centerVertical="true"
            android:paddingLeft="10.0dip"
            android:src="@drawable/back" />

        <TextView
            android:id="@+id/tv_title"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_centerInParent="true"
            android:text="添加记录"
            android:textColor="#ffffffff"
            android:textSize="30.0sp" />
    </RelativeLayout>

    <LinearLayout
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:orientation="horizontal">

        <TextView
            android:id="@+id/tv_record_time"
            android:layout_width="fill_parent"
            android:layout_height="wrap_content"
            android:gravity="center"
            android:padding="5.0dip"
            android:text="2020年1月1日"
            android:textColor="#fffb7a6a"
            android:visibility="gone" />
    </LinearLayout>

    <LinearLayout
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:gravity="center"
        android:orientation="horizontal">

        <TextView
            android:id="@+id/textView"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="分类:" />

        <Spinner
            android:id="@+id/catespinner"
            android:layout_width="100.0dip"
            android:layout_height="50.0dip"
            android:layout_weight="1.0" />

        <ImageView
            android:id="@+id/addcate"
            android:layout_width="30.0dip"
            android:layout_height="30.0dip"
            android:layout_weight="1.0"
            app:srcCompat="@drawable/add" />
    </LinearLayout>

    <LinearLayout
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:gravity="center"
        android:orientation="horizontal">

        <TextView
            android:id="@+id/textView3"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_weight="1.0"
            android:text="标签:" />

        <Spinner
            android:id="@+id/tagspinner"
            android:layout_width="100.0dip"
            android:layout_height="50.0dip"
            android:layout_weight="1.0" />

        <ImageView
            android:id="@+id/addtag"
            android:layout_width="30.0dip"
            android:layout_height="30.0dip"
            android:layout_weight="1.0"
            app:srcCompat="@drawable/add" />
    </LinearLayout>

    <EditText
        android:id="@+id/et_content"
        android:layout_width="fill_parent"
        android:layout_height="fill_parent"
        android:layout_weight="1.0"
        android:gravity="start"
        android:hint="请输入要添加的内容" />

    <LinearLayout
        android:layout_width="fill_parent"
        android:layout_height="60.0dip"
        android:orientation="horizontal">

        <ImageView
            android:id="@+id/delete"
            android:layout_width="0.0dip"
            android:layout_height="wrap_content"
            android:layout_weight="1.0"
            android:src="@drawable/delete" />

        <ImageView
            android:id="@+id/saveNote"
            android:layout_width="0.0dip"
            android:layout_height="wrap_content"
            android:layout_weight="1.0"
            android:src="@drawable/save_note" />
    </LinearLayout>
</LinearLayout>

四、完整的项目源码 

👇👇👇👇👇快捷获取方式👇👇👇👇👇

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mfbz.cn/a/890397.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

web-105linux权限提升

rsync未授权本地覆盖 Rsync 是 linux 下一款数据备份工具&#xff0c;默认开启 873 端口 https://vulhub.org/#/environments/rsync/common/ 借助 Linux 默认计划任务调用/etc/cron.hourly&#xff0c;利用 rsync 连接覆盖 前提条件就是需要知道rsync的密码或者存在未授权 -提…

Java微信支付接入(6) - API V3 Native 支付通知API

官方文档&#xff1a;https://pay.weixin.qq.com/wiki/doc/apiv3/apis/chapter3_4_5.shtml 通知规则&#xff1a;用户支付完成后&#xff0c;微信会把相关支付结果和用户信息发送给商户&#xff0c;商户需要接收处理该消息&#xff0c;并返回应答。对后台通知交互时&#xff0c…

如何解决 Vim 中的 “E212: Can‘t open file for writing“ 错误:从编辑到权限管理(sudo)

个人名片 &#x1f393;作者简介&#xff1a;java领域优质创作者 &#x1f310;个人主页&#xff1a;码农阿豪 &#x1f4de;工作室&#xff1a;新空间代码工作室&#xff08;提供各种软件服务&#xff09; &#x1f48c;个人邮箱&#xff1a;[2435024119qq.com] &#x1f4f1…

第十五届蓝桥杯C++B组省赛

文章目录 1.握手问题解题思路1&#xff08;组合数学&#xff09;解题思路2&#xff08;暴力枚举&#xff09; 2.小球反弹做题思路 3.好数算法思路&#xff08;暴力解法&#xff09;---不会超时 4.R格式算法思路 5.宝石组合算法思路---唯一分解定理 6.数字接龙算法思路----DFS 7…

TinyOS 点对基站通信

文章目录 一、前言1.1 发包的BlinkToRadio的数据包格式 二、混淆基站源码分析2.1 Makefile2.2 组件连接2.3 主逻辑代码 一、前言 1.1 发包的BlinkToRadio的数据包格式 如下&#xff0c;注意&#xff1a;AM层类型(1byte)即handlerID使可以在组件中修改的。 二、混淆基站源码…

uniapp学习(004-1 组件 Part.2生命周期)

零基础入门uniapp Vue3组合式API版本到咸虾米壁纸项目实战&#xff0c;开发打包微信小程序、抖音小程序、H5、安卓APP客户端等 总时长 23:40:00 共116P 此文章包含第31p-第p35的内容 文章目录 组件生命周期我们主要使用的三种生命周期setup(创建组件时执行)不可以操作dom节点…

使用 three.js和 shader 实现一个五星红旗 飘扬得着色器

使用 three.js和 shader 实现一个五星红旗 飘扬得着色器 源链接&#xff1a;https://threehub.cn/#/codeMirror?navigationThreeJS&classifyshader&idchinaFlag 国内站点预览&#xff1a;http://threehub.cn github地址: https://github.com/z2586300277/three-ce…

python异常检测 - 随机离群选择Stochastic Outlier Selection (SOS)

python异常检测 - Stochastic Outlier Selection (SOS) 前言 随机离群选择SOS算法全称stochastic outlier selection algorithm. 该算法的作者是jeroen janssens. SOS算法是一种无监督的异常检测算法. 随机离群选择SOS算法原理 随机离群选择SOS算法的输入: 特征矩阵(featu…

【代码】集合set

哈喽大家好&#xff0c;我是学霸小羊&#xff0c;今天来讲一讲集合&#xff08;set&#xff09;。 在数学上&#xff0c;集合长这样&#xff1a; 那今天就来讲一讲编程上的集合。 集合的定义&#xff1a;把一些元素按照某些规律放在一起&#xff0c;就形成了一个集合。比如说…

stm32单片机个人学习笔记10(TIM编码器接口)

前言 本篇文章属于stm32单片机&#xff08;以下简称单片机&#xff09;的学习笔记&#xff0c;来源于B站教学视频。下面是这位up主的视频链接。本文为个人学习笔记&#xff0c;只能做参考&#xff0c;细节方面建议观看视频&#xff0c;肯定受益匪浅。 STM32入门教程-2023版 细…

论文笔记:Template-Based Named Entity Recognition Using BART

论文来源&#xff1a;ACL 2021 Finding 论文链接&#xff1a;https://aclanthology.org/2021.findings-acl.161.pdf 论文代码&#xff1a;GitHub - Nealcly/templateNER: Source code for template-based NER 笔记仅供参考&#xff0c;撰写不易&#xff0c;请勿恶意转载抄袭…

D35【python 接口自动化学习】- python基础之输入输出与文件操作

day35 文件合并 学习日期&#xff1a;20241012 学习目标&#xff1a;输入输出与文件操作&#xfe63;-47 如何使用python合并多个文件&#xff1f; 学习笔记&#xff1a; 合并文件需求分析 合并两个文件 代码实现 # 合并两个文件 with open(demo1.txt) as f1:file_data_1f…

机器学习(10.7-10.13)(Pytorch LSTM和LSTMP的原理及其手写复现)

文章目录 摘要Abstract1 LSTM1.1 使用Pytorch LSTM1.1.1 LSTM API代码实现1.1.2 LSTMP代码实现 1.2 手写一个lstm_forward函数 实现单向LSTM的计算原理1.3 手写一个lstmp_forward函数 实现单向LSTMP的计算原理总结 摘要 LSTM是RNN的一个优秀的变种模型&#xff0c;继承了大部分…

鸿蒙--知乎评论

这里我们将采用组件化的思想进行开发 在开发中默认展示的是首页也就是 pages/Index.ets页面 这里存放的是所有页面的配置文件,类似与uniapp中的pages.json 如果我们此时要更改默认显示Zh

jmeter入门: 安装

前提&#xff1a; 安装jdk1.8&#xff0c; 并设置java_home 和path环境变量。 ​​​​​​1. download Apache JMeter - Download Apache JMeter 2. 解压jmeter包 3. 安装插件Install :: JMeter-Plugins.org 下载jar包&#xff0c;放到lib/ext目录 4. 打开jmeter &#xff0…

安装Node.js环境,安装vue工具

一、安装Node.js 去官方网站自行安装自己所需求的安装包 这是下载的官方网站 下载 | Node.js 中文网 给I accept the terms in the License Agreement打上勾然后点击Next 把安装包放到自己所知道的位置,后面一直点Next即可 等待它安装好 然后winr打开命令提示符cmd 二、安装…

解决报错:Invalid number of channels [PaErrorCode -9998]

继昨天重装了树莓派系统后&#xff0c;今天开始重新安装语音助手。在测试录音代码时遇到了报错“Invalid number of channels [PaErrorCode -9998]”&#xff0c;这是怎么回事&#xff1f; 有人说这是因为pyaudio没有安装成功造成的。于是&#xff0c;我pip3 install –upgrad…

难点:Linux 死机定位(进程虚拟地址空间耗尽)

死机定位(进程虚拟地址空间耗尽) 一、死机现象 内存富裕,但内存申请失败。 死机时打印: 怀疑是: 1、内存碎片原因导致。 2、进程虚拟地址空间耗尽导致。 3、进程资源限制导致。 二、内存碎片分析 1、理论知识:如何分析内存碎片化情况 使用 /proc/buddyinfo: /proc/…

数据结构-串

串的定义 串的操作 字符集编码 串的顺序存储 串的链式存储 模式匹配

完成Sentinel-Dashboard控制台数据的持久化-同步到Nacos

本次案例采用的是Sentinel1.8.8版本 一、Sentinel源码环境搭建 1、下载Sentinel源码工程 git clone https://github.com/alibaba/Sentinel.git 2、导入到idea 这里可以先运行DashboardApplication.java试一下是否运行成功&#xff0c;若成功&#xff0c;源码环境搭建完毕&a…