Android 简易手机通讯录(源码)

  简易手机通讯录

一:功能模块

  1.主界面,通过listview 展示所有联系人信息,并在没有联系人时给出友好提示

  2.主界面.显示最近查看的某个联系人信息

  3.主界面,可以长按某联系人项,弹出菜单,删除该联系人;删除联系人后,在手机通知栏弹出信息给用户提示

  4.主界面选择分组,可以查看所有联系人,也可以只查看某一分组的联系人

  5.点击主界面的某联系人,可以进入联系人详情界面,查看联系人各详细信息,并可修改联系人各信息;

    联系人的性别和所在分组可通过下拉菜单选择;长按电话号码,可以进入拨打电话功能;

    修改联系人信息后,跳转回到主界面,并使用Toast给予用户提示

  6.主界面菜单栏可以添加新联系人,关于等功能

  7.能在联系人详情界面,动态增加多个联系电话,并储存到数据库中

效果图展示:

    

     

源码下载地址:

项目回顾:

  1.scrollview嵌套listview产生的滑动冲突(recyclerview)

  解决方案:

        listView.setOnTouchListener(new View.OnTouchListener() {
            @Override
            public boolean onTouch(View v, MotionEvent event) {
                if(event.getAction() == MotionEvent.ACTION_UP){
                    //点击listview里面滚动停止时,scrollview拦截listview的触屏事件,就是scrollview该滚动了
                    scrollView.requestDisallowInterceptTouchEvent(false);
                }else{
                    //当listview在滚动时,不拦截listview的滚动事件;就是listview可以滚动,
                    scrollView.requestDisallowInterceptTouchEvent(true);
                }
                return false;
            }
        });

  2.关于listview 中 EditText  监听

        //1.在设置text前,先移除监听
        if (viewHodler.number.getTag() instanceof TextWatcher) {
            viewHodler.number.removeTextChangedListener((TextWatcher) viewHodler.number.getTag());
        }
        if (TextUtils.isEmpty(phoneNumber.getNumber())){
            viewHodler.number.setText("");
        }else {
            viewHodler.number.setText(phoneNumber.getNumber());
        }
        //2.新建监听类
        TextWatcher watcher = new TextWatcher() {
            @Override
            public void beforeTextChanged(CharSequence s, int start, int count, int after) {
            }

            @Override
            public void onTextChanged(CharSequence s, int start, int before, int count) {
            }

            @Override
            public void afterTextChanged(Editable s) {
                if (TextUtils.isEmpty(s)) {
                    phoneNumber.setNumber(null);
                    finalViewHodler.imageView.setVisibility(View.GONE);
                } else {
                    phoneNumber.setNumber(s.toString());
                    finalViewHodler.imageView.setVisibility(View.VISIBLE);
                }
                Log.e("tag", "afterTextChanged: " +s.toString() );
            }
        };
        //3.添加监听器
        viewHodler.number.addTextChangedListener(watcher);
        viewHodler.number.setTag(watcher);

    3.获取listview 中所有 Editext 的值

      思路:在适配器中创建HashMap  在getview()方法中 保存所有的Editext     key = position   value = editext

      然后在通过HashMap  获取就行了

private HashMap<Integer,EditText> edMap;

    @Override
    public View getView(final int position, View convertView, ViewGroup parent) {
        PhoneAdapter.ViewHodler viewHodler = null;

        if (convertView == null) {
            viewHodler = new PhoneAdapter.ViewHodler();
            convertView = LayoutInflater.from(context).inflate(R.layout.phone_list_item, null, false);
            viewHodler.spinner = convertView.findViewById(R.id.pnone_spinner);
            viewHodler.number = convertView.findViewById(R.id.pnone_number);
            viewHodler.imageView = convertView.findViewById(R.id.imageView4);
            //put 保存
            edMap.put(position,viewHodler.number);
            spMap.put(position,viewHodler.spinner);
            convertView.setTag(viewHodler);
        } else {
            viewHodler = (PhoneAdapter.ViewHodler) convertView.getTag();
            edMap.put(position,viewHodler.number);
            spMap.put(position,viewHodler.spinner);

        }

    4.拨打电话功能的坑

    public void call(String telPhone){
        if(checkReadPermission(Manifest.permission.CALL_PHONE,REQUEST_CALL_PERMISSION)){
            //要在telPhone前加上字符串tel:
            Intent intent = new Intent(Intent.ACTION_CALL,Uri.parse("tel:" + telPhone));
            startActivity(intent);
        }
    }

  不让你就会见到下图:

原文地址:https://www.cnblogs.com/conglingkaishi/p/10192283.html

时间: 2024-10-08 03:55:09

Android 简易手机通讯录(源码)的相关文章

android 近百个源码项目【转】

http://www.cnblogs.com/helloandroid/articles/2385358.html Android开发又将带来新一轮热潮,很多开发者都投入到这个浪潮中去了,创造了许许多多相当优秀的应用.其中也有许许多多的开发者提供了应用开源项目,贡献出他们的智慧和创造力.学习开源代码是掌握技术的一个最佳方式.下面推荐几个应用开源项目,这些项目不仅提供了优秀的创意,也可以直接掌握 Android内核的接口使用: 1.Android团队提供的示例项目 如果不是从学习Android S

Android 上千实例源码分析以及开源分析

Android 上千实例源码分析以及开源分析(百度云分享) 要下载的直接翻到最后吧,项目实例有点多. 首先 介绍几本书籍(下载包中)吧. 01_Android系统概述 02_Android系统的开发综述 03_Android的Linux内核与驱动程序 04_Android的底层库和程序 05_Android的JAVA虚拟机和JAVA环境 06_Android的GUI系统 07_Android的Audio系统 08_Android的Video 输入输出系统 09_Android的多媒体系统 10_

Android 4.4 全套源码及子模块源码的下载方法

博文<Android源码下载--用git clone实现单个目录下载>介绍了采用git clone方法下载Android单个目录源码的方法,这篇文章已经有四年的历史,这期间Google对源代码的管理网站已经进行了更改,直接采用原来的方法下载源代码已经失效.本文介绍了在ubuntu下(在Windows下安装Cygwin,通过Cygwin也可在Windows里通过本文的下载步骤下载Android源码)获取目前最新的Android 4.4 全套源码以及单个自模块源码的下载方法,可根据本文方法下载全套

高仿精仿金山手机卫士源码项目完整版

金山手机卫士源码 ,里面各种技术,能学到很多东西,不懂的可以问作者,不多说,先上图,全部干,要把数据库导入的啊,不然会报错的,没有任何问题,大多数控件基本自定义,全部干货,很多人说这份代码贵,其实不贵,纯手工打造,由于是原创还包售后服务,不懂可以直接问作者 源码项目下载http://code.662p.com/view/3905.html<ignore_js_op> <ignore_js_op> <ignore_js_op> <ignore_js_op> &

MT 6572 平台手机系统源码分析

1.Android源码中Package包下有: 2.最主要使用的是Package/app 下的包,这里面包含一些系统应用,比如: 3.编译app模块下的应用的方法如下: 编译方法: User版本: ./mk -o=TARGET_BUILD_VARIANT=user ${projectname} mm packages/apps/Settings/ Eng版本: ./mk ${projectname} mm packages/apps/Settings/ 4.在package/app 下内置第三方

《简易新闻》源码分析

0. 前言 本文将对github上 liuling开发的基于Material Design和MVP的<简易新闻>源码进行简要分析,通过本文你将学到: 阅读应用源码的步骤 RecyclerView NavigationView 下拉刷新和上拉加载 Material过渡动画 CollapsingToolbarLayout 1. 寻找入口 分析一个应用就是从MainActivity下手,那么如何找到MainActivity呢?当然还是通过Manifest文件,不过,在进入Manifest文件前,我们

放大招了!基于Bmob的Android即时通讯应用源码[升级版]

此帖为  放大招了!基于Bmob的Android即时通讯应用源码 (一) 续篇,主要是更新的功能. 一.更新更能: 1.新增支持陌生人聊天,允许发送给非好友用户: 2.新增支持自定义消息发送,便于开发者扩展: 3.新版本大幅度增加稳定性和及时性,保证百分百到达: 4.排除web后端推送对客户端的影响. 二.更新讲解: 1.如果你希望能和所有人(不局限于好友关系)进行聊天,那么这一版本就解决了这个问题. 如果你想看到效果,可以点击附近的人,你找到一个非好友用户,再查看他的资料,这一页面下方有个"发

Android增加v7 appcompat源码

1.File ---- Import---- Existing Android Code Into Workspace 2.选择 <sdk>/extras/android/support/v7/appcompat/导入进来 3.去github上查找,"platform framework support",下载下来后解压,里面包含了v4,v7,v13的源码 4.在我们第2步导入的appcompat项目的libs下建立一个"android-support-v7-ap

[Android阅读代码]android-async-http源码学习一

android-async-http 下载地址 一个比较常用的Http请求库,基于org.apache.http对http操作进行封装. 特点: 1.每一个HTTP请求发生在UI线程之外,Client通过回调处理HTTP请求的结果,使得Client代码逻辑清晰 2.每一个请求使用线程池管理执行 3.支持gzip , cookie等功能 4.支持自动重试连接功能 [Android阅读代码]android-async-http源码学习一,布布扣,bubuko.com