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

网络资源模板--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();}});

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

四、完整的项目源码 

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

相关文章:

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

目录 一、项目演示 二、项目测试环境 三、项目详情 四、完整的项目源码 一、项目演示 网络资源模板--基于Android studio 通讯录 二、项目测试环境 三、项目详情 首页 MainActivity 类是一个 Android 地址簿应用的核心部分&#xff0c;负责管理联系人列表的显示、搜索和添…...

Spring 出现 No qualifying bean of type ‘com.xxx‘ available 解决方法

目录 1. 问题所示2. 原理分析3. 解决方法4. 彩蛋4.1 bug彩蛋4.2 完整Demo4.3 补充Springboot1. 问题所示 出现如下问题: 19:58:23.476 [main] DEBUG org.springframework.beans.factory.support.DefaultListableBeanFactory - Creating shared instance of singleton bean o…...

C# 批量更改文件后缀名称

解决问题思路 解决固定文件夹下更改文件后缀名&#xff0c;采用轮询的方式&#xff0c; 流程如下&#xff1a; 获取当前文件名&#xff08;带后缀的文件名&#xff09;截取文件名称&#xff0c;去掉后缀另存为带更改后的后缀文件 注意&#xff1a;采用第三方插件&#xff0…...

KIC算法介绍及pyrosetta示例代码

Kinetic Loop Closure (KIC) 是 Rosetta 中一种重要的环区(loop region)建模算法,主要用于解决蛋白质中的柔性区域(特别是环区)的重构问题。环区是蛋白质中非常灵活的部分,通常结构不确定。KIC 算法采用基于运动学的解决方案,通过设置特定的几何约束,能够在给定的两端锚…...

【论文串烧】多媒体推荐中的模态平衡学习 | 音视频语音识别中丢失导致的模态偏差对丢失视频帧鲁棒性的影响

文章目录 一、多媒体推荐中的模态平衡学习1.1 研究背景1.2 解决问题1.3 实施方案1.4 文章摘要1.5 文章重点1.6 文章图示图 1&#xff1a;不同模型变体在 AmazonClothing 数据集上的初步研究图 2&#xff1a;CKD模型架构的说明图 3&#xff1a;在 Amazon-Clothing 数据集上训练过…...

【C语言二级考试】循环结构设计

C语言二级考试——循环结构程序设计 五.循环结构程序设计 1.for循环结构 2.while和do-while循环结构 3.continue语句和break语句 4.循环的嵌套 知识点参考【C语言】循环-CSDN博客 文章目录 1.for循环2.while和do-while循环结构3.continue语句和break语句4.循环的嵌套 1.for循环…...

诗文发布模板(python代码打造键盘录入诗文自动排版,MarkDown源码文本)

python最好用的f-string&#xff0c;少量代码打造键盘录入诗文自动排版。 (笔记模板由python脚本于2024年09月19日 19:11:50创建&#xff0c;本篇笔记适合喜欢写诗的pythoner的coder翻阅) 【学习的细节是欢悦的历程】 Python 官网&#xff1a;https://www.python.org/ Free&am…...

GO主流开源框架

GO主流开源框架 Go 语言有着丰富的开源框架生态&#xff0c;涵盖了多种应用场景&#xff0c;如 Web 开发、数据库操作、微服务、日志处理等。以下是一些常见的 Go 框架及其典型作用场景&#xff1a; 1. Web 框架 Gin: 作用&#xff1a;一个高性能的轻量级 Web 框架&#xff…...

LeetCode:2398. 预算内的最多机器人数目 双指针+单调队列,时间复杂度O(n)

2398. 预算内的最多机器人数目 today 2398. 预算内的最多机器人数目 题目描述 你有 n 个机器人&#xff0c;给你两个下标从0开始的整数数组 chargeTimes 和 runningCosts &#xff0c;两者长度都为 n 。第 i 个机器人充电时间为 chargeTimes[i] 单位时间&#xff0c;花费 ru…...

oracle 插入date日期类型的数据、插入从表中查出的数据,使用表中的默认数据

date sysdate to_date 插入从表中查出的数据 方式一 方式二 或者指定列名称 下边这个案例的前提是指定列插入&#xff0c;如果不指定&#xff0c;则也是默认的...

物流系统打单软件 佳易王物流运单怎么打印教程

一、前言 物流系统打单软件 佳易王物流运单怎么打印教程 1、佳易王物流管理系统可同时打印物流单和标签 2、如果一台电脑上有多台打印机&#xff0c;软件可以设置物流或标签对应的打印机&#xff0c;系统自动识别打印机。 二、软件程序图文说明 1、上图为 物流单在空白单上打…...

二叉树计算

题目描述 给出一个二叉树&#xff0c;请由该二叉树生成一个新的二叉树&#xff0c;它满足其树中的每个节点将包含原始树中的左子树和右子树的和。左子树表示该节点左侧叶子节点为根节点的一颗新树;右子树表示该节点右侧叶子节点为根节点的一颗新树。 输入描述 2行整数&#…...

Java并发执行举例

在Java中实现并发执行可以通过多种方式&#xff0c;最常见的方式包括使用线程、ExecutorService、ForkJoinPool等。以下是几种常用并发执行的示例&#xff1a; 1. 使用Thread类 这是Java中最基础的并发实现&#xff0c;通过创建一个继承自Thread的类或实现Runnable接口来定义…...

Java 基础知识九(网络编程)

UDP DatagramSocket:通讯的数据管道 -send 和receive方法 -(可选&#xff0c;多网卡)绑定一个IP和Port DatagramPacket -集装箱:封装数据 -地址标签:目的地IPPort package org.example.net;import java.net.DatagramPacket; import java.net.DatagramSocket; import java.n…...

深入解析Go语言的类型方法、接口与反射

解锁Python编程的无限可能:《奇妙的Python》带你漫游代码世界 Go语言作为一门现代编程语言,以其简洁高效的特性受到广大开发者的喜爱。在本文中,我们将深入探讨Go语言中的类型方法、接口和反射机制。通过丰富的代码示例和详尽的解释,帮助您全面理解这些关键概念,并在实际…...

C#中线程池【异步】

在 WinForm 项目中&#xff0c;线程池中的线程主要用于执行异步和并发任务。当你调用某些异步方法或使用并行编程时&#xff0c;线程池中的线程就会被使用。 在以下场景中&#xff0c;线程池的线程会被使用&#xff1a; 使用场景 异步任务执行 当你使用 Task.Run() 或 TaskF…...

OpenAI 刚刚推出 o1 大模型!!突破LLM极限

北京时间 9 月 13 日午夜&#xff0c;OpenAI 正式发布了一系列全新的 AI 大模型&#xff0c;专门用于应对复杂问题。 这一新模型的出现代表了一个重要突破&#xff0c;其具备的复杂推理能力远远超过了以往用于科学、代码和数学等领域的通用模型&#xff0c;能够解决比之前更难的…...

【Vmware16安装教程】

&#x1f4d6;Vmware16安装教程 ✅1.下载✅2.安装 ✅1.下载 官网地址&#xff1a;https://www.vmware.com/ 百度云盘&#xff1a;Vmware16下载 123云盘&#xff1a;Vmware16下载 ✅2.安装 1.双击安装包VMware-workstation-full-16.1.0-LinuxProbe.Com.exe&#xff0c;点击…...

Delphi5利用DLL实现窗体的重用

文章目录 效果图参考利用DLL实现窗体的重用步骤1 设计出理想窗体步骤2 编写一个用户输出的函数或过程&#xff0c;在其中对窗体进行创建使它实例化步骤3 对工程文件进行相应的修改以适应DLL格式的需要步骤4 编译工程文件生成DLL文件步骤5 在需要该窗体的其他应用程序中重用该窗…...

使用JavaWeb开发注册功能时,校验用户名是否已存在的一个思路(附代码)

在开发 Web 应用程序时&#xff0c;用户注册是一个常见的功能。为了确保每个用户都有一个唯一的用户名&#xff0c;我们需要在用户注册时检查数据库中是否已经存在该用户名。本文将详细介绍如何在 Servlet 中使用 JDBC 技术来检查用户名是否存在。 1. JDBC 简介 Java Databas…...

从零到一:基于MMPretrain框架定制化训练专属图像分类模型

1. 环境准备与框架安装 第一次接触MMPretrain时&#xff0c;我对着官方文档折腾了半天环境配置。后来发现用mim这个包管理工具能省去80%的依赖问题。先确保你的Python环境是3.7版本&#xff0c;然后执行下面这组命令&#xff1a; pip install openmim mim install mmengine mim…...

SEO 对于SaaS产品销售有什么影响

SEO对于SaaS产品销售的重要性 在当前的数字化经济时代&#xff0c;软件即服务&#xff08;SaaS&#xff09;产品正日益成为各行各业的首选工具。仅拥有优质的产品还远远不够&#xff0c;如何让潜在客户能够找到并选择你的产品至关重要。这时&#xff0c;搜索引擎优化&#xff…...

DeviceKit性能优化终极指南:如何避免常见的内存和CPU问题?

DeviceKit性能优化终极指南&#xff1a;如何避免常见的内存和CPU问题&#xff1f; 【免费下载链接】DeviceKit DeviceKit is a value-type replacement of UIDevice. 项目地址: https://gitcode.com/gh_mirrors/de/DeviceKit DeviceKit是一个轻量级的Swift框架&#xff…...

fflate错误处理完全指南:如何优雅处理压缩异常

fflate错误处理完全指南&#xff1a;如何优雅处理压缩异常 【免费下载链接】fflate High performance (de)compression in an 8kB package 项目地址: https://gitcode.com/gh_mirrors/ff/fflate fflate是一个高性能的JavaScript压缩解压库&#xff0c;但在处理压缩数据时…...

OpenClaw云端体验指南:星图平台Qwen3-14B镜像+OpenClaw沙盒部署

OpenClaw云端体验指南&#xff1a;星图平台Qwen3-14B镜像OpenClaw沙盒部署 1. 为什么选择云端沙盒体验&#xff1f; 第一次接触OpenClaw时&#xff0c;我尝试在本地MacBook上部署&#xff0c;结果被复杂的依赖关系和环境配置劝退。直到发现星图平台的Qwen3-14B镜像OpenClaw沙…...

深入解析Anaconda中的pkgs文件夹:功能、管理与优化策略

1. pkgs文件夹的核心功能解析 第一次打开Anaconda安装目录时&#xff0c;很多人都会被那个占据几个GB空间的pkgs文件夹吓一跳。这个看似普通的文件夹&#xff0c;其实是Anaconda生态系统的"心脏"。它不仅仅是存放安装包的仓库&#xff0c;更承担着环境管理的关键角色…...

AI 编程上下文管理新范式(非常详细),Spec 机制从入门到精通,收藏这一篇就够了!

最近围绕 Spec 的讨论明显变多。比较有代表性的声音大致有两类&#xff1a;一类更关注 Spec 和代码之间的边界&#xff0c;另一类更关注 Spec 在真实项目协作中的工程价值。这两类观察并不冲突&#xff0c;放在一起看&#xff0c;刚好能把问题看得更完整。 本质上都在回答同一…...

EF Core 原生 SQL 实战:FromSql、SqlQuery 与对象映射边界

先唠两句&#xff1a;参数就像餐厅点单 把API想象成一家餐厅的“后厨系统”。 ? 路径参数/dishes/{dish_id} -> 好比你要点“宫保鸡丁”这道具体的菜&#xff0c;它是菜单&#xff08;资源路径&#xff09;的一部分。查询参数/dishes?spicytrue&typeSichuan -> 好比…...

17.在 React 中如何根据条件决定渲染哪个组件?

在 React 里&#xff0c;组件不是一上来就“全给你渲染出来”的。 很多时候&#xff0c;我们希望&#xff1a;界面要看情况说话——登录了看“欢迎回来”没登录就看“请先登录”加载中只给你个转圈圈请求失败再丢个错误提示这些“根据条件&#xff0c;决定渲染什么”的行为&…...

前端可访问性:让所有人都能使用你的应用

前端可访问性&#xff1a;让所有人都能使用你的应用 一、引言 又到了我这个毒舌工匠上线的时间了&#xff01;今天咱们来聊聊前端可访问性这个话题。别以为可访问性只是给残障人士用的&#xff0c;实际上&#xff0c;良好的可访问性能够让所有人都能更好地使用你的应用&#xf…...