网络资源模板--Android Studio 通讯录App

目录

一、项目演示

二、项目测试环境

三、项目详情

四、完整的项目源码 


一、项目演示

网络资源模板--基于Android studio 通讯录

二、项目测试环境

三、项目详情

首页

`MainActivity` 类是一个 Android 地址簿应用的核心部分,负责管理联系人列表的显示、搜索和添加功能。以下是其主要功能的总结:

1. **数据库初始化**:在 `onCreate` 方法中,应用程序初始化数据库,通过 `DBUntil` 类获取可写数据库实例。

2. **联系人列表显示**:
   - 通过 `PeoDao.getAllPeo()` 方法获取所有联系人,并使用 `ListView` 显示。
   - 如果联系人列表为空,`ListView` 不显示任何内容。
   - 联系人按照首字母进行排序,特殊字符(如 `#`)排在最后。

3. **添加新联系人**:应用提供了一个 `FloatingActionButton`,用户点击后会跳转到 `AddActivity` 界面,允许用户添加新联系人。

4. **实时搜索功能**:
   - 应用支持通过输入框(`EditText`)进行搜索,用户输入的内容会实时更新联系人列表。
   - 使用 `TextWatcher` 监听输入框内容变化,在每次文本变化后,更新 `ListView` 的适配器以显示匹配的联系人。
   - 如果输入框为空,则重新加载所有联系人。

5. **适配器**:使用自定义的 `PeoAdapter` 来管理 `ListView` 中联系人的显示。

整体来说,`MainActivity` 类提供了一个基本的联系人管理界面,支持添加、显示和搜索联系人。

 if (result.size() == 0) {listView.setAdapter((ListAdapter) null);} else {result.sort(new Comparator<PeoBean>() {public int compare(PeoBean peoBean, PeoBean t1) {if (peoBean.getBeginZ().equals("#") || t1.getBeginZ().equals("#")) {return 1;}return peoBean.getBeginZ().compareTo(t1.getBeginZ());}});listView.setAdapter((ListAdapter) new PeoAdapter(this, result));}((FloatingActionButton) findViewById(R.id.add)).setOnClickListener(v -> {MainActivity.this.startActivity(new Intent(MainActivity.this, AddActivity.class));});

添加页面

`AddActivity` 类是一个用于添加新联系人的界面,具备输入和保存联系人的功能。以下是其主要功能的总结:

1. **界面布局**:在 `onCreate` 方法中,设置活动的视图布局为 `activity_add`,并初始化 UI 组件。

2. **工具栏设置**:工具栏 (`Toolbar`) 被设置为点击后结束当前活动,返回到上一界面。

3. **输入字段**:
   - 提供 `TextView` 组件用于输入姓名、手机号和备注。
   - 使用两个 `RadioButton` 选择性别,默认选择“男”。

4. **添加联系人按钮**:
   - 通过 `Button` 组件触发保存联系人操作。
   - 输入字段的值在点击按钮时被验证:
     - 如果姓名、手机号或备注为空,显示相应的提示信息(使用 `Toast`)。
     - 如果所有字段均填写,获取性别信息并调用 `PeoDao.savePeo()` 方法将联系人信息保存到数据库。

5. **成功提示**:在成功添加联系人后,使用 `Toast` 提示用户“添加成功”。

总之,`AddActivity` 提供了一个简洁的用户界面,用于输入和保存新的联系人信息,并通过输入验证确保数据完整性。

  ((Button) findViewById(R.id.add_button)).setOnClickListener(v -> {String nameT = name.getText().toString().trim();String phoneT = phone.getText().toString().trim();String bzT = bz.getText().toString().trim();if (nameT.isEmpty()) {Toast.makeText(AddActivity.this, "请输入姓名",  Toast.LENGTH_SHORT).show();} else if (phoneT.isEmpty()) {Toast.makeText(AddActivity.this, "请输入手机号",  Toast.LENGTH_SHORT).show();} else if (bzT.isEmpty()) {Toast.makeText(AddActivity.this, "请输入备注",  Toast.LENGTH_SHORT).show();} else {String sex = "女";if (man.isChecked()) {sex = "男";}PeoDao.savePeo(nameT, phoneT, sex, bzT);Toast.makeText(AddActivity.this, "添加成功",  Toast.LENGTH_SHORT).show();}});

详情页

`DetailsActivity` 类用于显示和管理特定联系人的详细信息,包括拨打电话、发送短信、更新和删除联系人。以下是其主要功能的总结:

1. **界面布局**:在 `onCreate` 方法中,设置活动的视图布局为 `activity_details`,并获取传递的联系人 ID。

2. **显示联系人信息**:
   - 通过 `PeoDao.getOnePeo(id)` 方法获取联系人信息,并在界面上显示姓名、手机号、性别和备注。
   - 根据性别显示相应的头像(男性或女性)。

3. **拨打电话**:
   - 为拨打电话的按钮设置点击监听器,检查是否有拨打电话的权限。
   - 如果有权限,调用 `makePhoneCall()` 方法执行电话拨打;如果没有权限,申请权限。

4. **发送短信**:
   - 提供按钮以发送短信,点击后创建一个短信发送的意图,并传入目标手机号。

5. **返回和删除功能**:
   - 提供返回按钮,点击后返回主界面(`MainActivity`)。
   - 提供删除按钮,点击后调用 `PeoDao.delPeo(id)` 删除联系人,并显示删除成功的提示,然后返回主界面。

6. **更新联系人**:
   - 提供更新按钮,点击后跳转到 `UpdateActivity` 并传递联系人 ID,以便更新其信息。

总之,`DetailsActivity` 类为用户提供了一个全面的界面来查看和管理单个联系人的详细信息,支持拨打电话、发送短信、更新和删除操作。

 ((Button) findViewById(R.id.de_da_message)).setOnClickListener(v -> {Intent intent = new Intent("android.intent.action.SENDTO");intent.setData(Uri.parse("smsto:" + Uri.encode(num.getText().toString().trim())));DetailsActivity.this.startActivity(intent);});((Button) findViewById(R.id.de_back)).setOnClickListener(v -> {DetailsActivity.this.startActivity(new Intent(DetailsActivity.this, MainActivity.class));});((Button) findViewById(R.id.de_del)).setOnClickListener(v -> {PeoDao.delPeo(id);Toast.makeText(DetailsActivity.this, "删除成功",  Toast.LENGTH_SHORT).show();DetailsActivity.this.startActivity(new Intent(DetailsActivity.this, MainActivity.class));});((Button) findViewById(R.id.de_up)).setOnClickListener(v -> {Intent intent = new Intent(DetailsActivity.this, UpdateActivity.class);intent.putExtra("id", id);DetailsActivity.this.startActivity(intent);});

修改页面

`UpdateActivity` 类用于更新已存在联系人的信息,提供了用户界面来修改姓名、手机号、性别和备注。以下是其主要功能的总结:

1. **界面布局**:在 `onCreate` 方法中,设置活动的视图布局为 `activity_update`,并初始化 UI 组件。

2. **工具栏设置**:点击工具栏可以结束当前活动,返回上一个界面。

3. **获取和显示现有信息**:
   - 通过 `getIntent().getStringExtra("id")` 获取联系人 ID,并通过 `PeoDao.getOnePeo(id)` 获取对应的联系人信息。
   - 将现有信息填充到相应的输入字段(姓名、手机号、性别和备注)。

4. **性别选择**:根据获取的性别信息设置相应的 `RadioButton` 为选中状态(男或女)。

5. **更新按钮**:
   - 为更新按钮设置点击监听器,在点击时进行输入验证:
     - 检查姓名、手机号和备注是否为空,并通过 `Toast` 提示用户。
     - 如果输入有效,获取性别信息,并调用 `PeoDao.updatePeo()` 方法更新联系人信息。

6. **成功提示**:在更新成功后,使用 `Toast` 提示用户“更改成功”。

总之,`UpdateActivity` 提供了一个简洁的用户界面,使用户能够方便地更新联系人的详细信息,并通过输入验证确保数据的完整性。

 ((Button) findViewById(R.id.up_button)).setOnClickListener(v -> {String nameT = name.getText().toString().trim();String phoneT = phone.getText().toString().trim();String bzT = bz.getText().toString().trim();if (nameT.isEmpty()) {Toast.makeText(UpdateActivity.this, "请输入姓名", Toast.LENGTH_SHORT).show();} else if (phoneT.isEmpty()) {Toast.makeText(UpdateActivity.this, "请输入手机号", Toast.LENGTH_SHORT).show();} else if (bzT.isEmpty()) {Toast.makeText(UpdateActivity.this, "请输入备注", Toast.LENGTH_SHORT).show();} else {String sex = "女";if (man.isChecked()) {sex = "男";}PeoDao.updatePeo(nameT, phoneT, sex, bzT, id);Toast.makeText(UpdateActivity.this, "更改成功", Toast.LENGTH_SHORT).show();}});

拨打电话和发短信效果页面

四、完整的项目源码 

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

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

如若内容造成侵权/违法违规/事实不符,请联系一条长河网进行投诉反馈,一经查实,立即删除!

相关文章

Java | Leetcode Java题解之第421题数组中的两个数的最大异或值

题目&#xff1a; 题解&#xff1a; class Solution {// 字典树的根节点Trie root new Trie();// 最高位的二进制位编号为 30static final int HIGH_BIT 30;public int findMaximumXOR(int[] nums) {int n nums.length;int x 0;for (int i 1; i < n; i) {// 将 nums[i…

Element Plus 中Input输入框

通过鼠标或键盘输入字符 input为受控组件&#xff0c;他总会显示Vue绑定值&#xff0c;正常情况下&#xff0c;input的输入事件会正常被响应&#xff0c;他的处理程序应该更新组件的绑定值&#xff08;或使用v-model&#xff09;。否则&#xff0c;输入框的值将不会改变 不支…

Nginx配置虚拟主机

基于域名的虚拟主机 修改配置 进入nginx里的conf目录 修改nginx配置文件nginx.conf vi nginx.conf worker_processes auto;(自动识别CPU数) worker_rlimit_nofile 20480;&#xff08;指定 worker 子进程可以打开的最大文件句柄数&#xff0c;默认为1024&#xff09; use …

【有啥问啥】摄像头成像质量量化标准解读与测试方法

摄像头成像质量量化标准解读与测试方法 在自动驾驶和智能驾驶舱领域&#xff0c;摄像头是关键的感知设备&#xff0c;直接关系到系统的环境感知能力。为确保摄像头在实际应用中表现出色&#xff0c;需明确了解其成像质量标准和测试方法。本文将围绕成像质量的核心指标、测试方…

103.运行tomcat的Tomcatstartup.bat时,终端打印的中文显示为乱码

目录 原因 解决方法 原因 当运行Tomcat的Tomcatstartup.bat时&#xff0c;如果终端中文显示为乱码&#xff0c;这通常是因为Tomcat使用的日志输出编码与Windows命令行默认的编码不匹配。 解决方法 针对这一问题&#xff0c;你可以尝试以下步骤来解决&#…

2024年9月第3周AI资讯

阅读时间&#xff1a;3-4min 更新时间&#xff1a;2024.9.16-2024.9.20 目录 OpenAI 推出 o1&#xff1a;一种新的“推理”人工智能模型 微软为 Excel 和 Word 添加了更快的 Copilot World Labs 利用 AI 创建 3D 世界 AI 利用文本创建开放世界视频游戏 OpenAI 推出 o1&#x…

【源码+文档+调试讲解】微信小程序的投票系统

摘 要 伴随着我国社会的发展&#xff0c;人民生活质量日益提高。于是对各种需求进行规范而严格是十分有必要的&#xff0c;所以许许多多的微信小程序应运而生。此时单靠人力应对这些事务就显得有些力不从心了。所以本论文将设计一套微信小程序的投票系统&#xff0c;进行作品信…

Vue3DevTools7是如何在vscode定位指定文件位置的?

Vue3DevTools7是如何在vscode定位指定文件位置的&#xff1f; 背景 今天在使用vue脚手架创建项目的时候&#xff0c;并发现一个新的&#xff08;实验中的新功能&#xff09;&#xff0c;可以直接在我们的项目中集成Vue DevTools插件&#xff0c;浏览器插件devtools即将成为历史…

JAVA毕业设计178—基于Java+Springboot+vue的智能家具管理系统(源代码+数据库+万字论文)

毕设所有选题&#xff1a; https://blog.csdn.net/2303_76227485/article/details/131104075 基于JavaSpringbootvue的智能家具管理系统(源代码数据库万字论文)178 一、系统介绍 本项目前后端分离(可以改为ssm版本)&#xff0c;分为用户、管理员两种角色 1、用户&#xff1…

带你0到1之QT编程:十四、QV/HBoxLayout和QStatckedWidget双剑合璧

此为QT编程的第十四谈&#xff01;关注我&#xff0c;带你快速学习QT编程的学习路线&#xff01; 每一篇的技术点都是很很重要&#xff01;很重要&#xff01;很重要&#xff01;但不冗余&#xff01; 我们通常采取总-分-总和生活化的讲解方式来阐述一个知识点&#xff01; …

如何写一个自动化Linux脚本去进行等保测试--引言

#我的师兄喜欢给我的休闲实习生活加活&#xff0c;说是让我在实习期间写一个自动化脚本去进行等保测试。呵呵哒。 怎么办呢&#xff0c;师兄的指令得完成&#xff0c;师兄说让我使用Python完成任务。 设想如下&#xff1a; 1、将Linux指令嵌入到python脚本中 2、调试跑通 …

【Day02-JS+Vue+Ajax】

1. JS介绍 在前面的课程中&#xff0c;我们已经学习了HTML、CSS的基础内容&#xff0c;我们知道HTML负责网页的结构&#xff0c;而CSS负责的是网页的表现。 而要想让网页具备一定的交互效果&#xff0c;具有一定的动作行为&#xff0c;还得通过JavaScript来实现。那今天,我们就…

如何用 Web 界面 AI 工作流提升科研写作效率?

&#xff08;注&#xff1a;本文为小报童精选文章。已订阅小报童或加入知识星球「玉树芝兰」用户请勿重复付费&#xff09; 更易用&#xff0c;更高效。 痛点 作为一名研究生导师&#xff0c;我深深体会到学生在撰写论文时拖延症的严重程度。他们往往打开一个空白的 Word 文档&…

CSS01-语法规范、基础选择器

一、CSS语法规范 示例&#xff1a; 二、CSS的基础选择器 选择器(选择符)就是根据不同需求把不同的标签选出来这就是选择器的作用。 简单来说&#xff0c;就是选择标签用的。 选择器的分类&#xff1a; 1、标签选择器 2、类选择器&#xff08;开发最常用&#xff09; 长字符命名…

VScode开发GD32移植(标准库通用),保姆级!!!!!!!

VScode开发GD32移植(标准库通用)&#xff0c;保姆级&#xff01;&#xff01;&#xff01;&#xff01;&#xff01;&#xff01;&#xff01; 文章目录 VScode开发GD32移植(标准库通用)&#xff0c;保姆级&#xff01;&#xff01;&#xff01;&#xff01;&#xff01;&#…

稳联Profinet转Canopen网关携手伺服,高效提升生产效率

在当今的工业生产领域&#xff0c;追求高效、精准和可靠的生产方式是企业不断努力的方向。稳联技术Profinet转Canopen&#xff08;WL-ABC3033&#xff09;网关与伺服系统的携手合作&#xff0c;为提高生产效率带来了新的机遇和突破。 实现无缝通信&#xff0c;优化生产流程稳联…

煤矿智慧矿井数据集 (1.煤矿采掘工作面智能分析数据集2.煤矿井下钻场智能分析数据集 )

智慧矿井智能分析数据集 数据1&#xff1a;数据1包含煤矿采掘工作面工人安全帽检测&#xff0c;工人行为检测&#xff08;行走&#xff0c;站立&#xff0c;坐&#xff0c;操作&#xff0c;弯腰&#xff0c;靠&#xff0c;摔&#xff0c;爬&#xff09;&#xff0c;液压支撑防护…

python内置装饰器,解决接口自动化中公共方法(如,读excel),无需实例化即可调用...

Python 还提供了一些内置的装饰器&#xff0c;比如 staticmethod 和 classmethod&#xff0c;用于定义静态方法和类方法。 如接口自动化中&#xff0c;公共的方法&#xff0c;在一个文件夹&#xff0c;其他文件需要调用&#xff1b;

【题库制作】对于一个文档题库,将3或4个选项的题目分别放在单独的区域

原文链接&#xff1a;https://www.cnblogs.com/MrFlySand/p/18422619 操作步骤 如下图&#xff0c;对于一个文档题库&#xff0c;将3或4个选项的题目分别放在单独的区域 多添加一行D&#xff1a;将答案&#xff1a;替换为D.\n答案&#xff1a; 删除多余的D行&#xff1a;将D\…

HTML粉色烟花秀

目录 系列文章 写在前面 完整代码 代码分析 写在最后 系列文章 序号目录1HTML满屏跳动的爱心&#xff08;可写字&#xff09;2HTML五彩缤纷的爱心3HTML满屏漂浮爱心4HTML情人节快乐5HTML蓝色爱心射线6HTML跳动的爱心&#xff08;简易版&#xff09;7HTML粒子爱心8HTML蓝色…