【Android Demo】简单手机通讯录

简介:

Android 系统给我们提供了访问通讯录的接口,通过接口获取通讯录信息。Adapter 与 View 的连接主要依靠 getView 这个方法返回我们需要的自定义 view。 ListView 是 Android App 中一个最最最常用的控件了,所以如何让 ListView 流畅运行,获取良好的用户体验是非常重要的。 对 ListView 优化就是对 Adapter 中的 getView 方法进行优化。

 

核心内容:

1.获取手机通讯录

2.数据封装

3.创建 Adapter 

4.优化适配器

 

开发环境:Eclipse

 

效果图:

 

步骤:

1.新建项目,新建 GetNumber.class 类,用来获取通讯录中的信息

复制代码
package com.yanis.getmyphonenumber;

import java.util.ArrayList;
import java.util.List;

import android.content.Context;
import android.database.Cursor;
import android.provider.ContactsContract.CommonDataKinds.Phone;

public class GetNumber {
    public static List<PhoneInfo> lists = new ArrayList<PhoneInfo>();
    public static String getNumber(Context context) {
        Cursor cursor = context.getContentResolver().query(Phone.CONTENT_URI,
                null, null, null, null);
        String phoneNumber;
        String phoneName;
        while (cursor.moveToNext()) {
            phoneNumber = cursor.getString(cursor.getColumnIndex(Phone.NUMBER));//电话号码
            phoneName = cursor.getString(cursor.getColumnIndex(Phone.DISPLAY_NAME));//姓名
            PhoneInfo  info = new PhoneInfo(phoneName, phoneNumber);
            lists.add(info);
            System.out.println(phoneName+phoneNumber);
        }
        return null;
    }
}
复制代码

2.添加权限

   <!-- 读取联系人权限 -->  
<uses-permission android:name="android.permission.READ_CONTACTS"/>

3.新建 PhoneInfo.class 类作为通讯录信息封装类

复制代码
package com.yanis.getmyphonenumber;

/**
 * 
 * @author yechao
 * @说明 通讯录信息封装类
 */
public class PhoneInfo {
    private String phoneName;
    private String phoneNumber;

    public PhoneInfo(String phoneName, String phoneNumber) {
        setPhoneName(phoneName);
        setPhoneNumber(phoneNumber);
    }

    public String getPhoneName() {
        return phoneName;
    }

    public void setPhoneName(String phoneName) {
        this.phoneName = phoneName;
    }

    public String getPhoneNumber() {
        return phoneNumber;
    }

    public void setPhoneNumber(String phoneNumber) {
        this.phoneNumber = phoneNumber;
    }

}
复制代码

4.自定义 ListView 的适配器类 MyAdapter.class 

复制代码
package com.yanis.getmyphonenumber;

import java.util.List;

import android.content.Context;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.BaseAdapter;
import android.widget.LinearLayout;
import android.widget.TextView;

public class MyAdapter extends BaseAdapter {

    private List<PhoneInfo> lists;
    private Context context;//承接上下文
    
    public MyAdapter(List<PhoneInfo> lists,Context context)
    {
        this.lists = lists;
        this.context = context;
    }
    
    //返回集合的数量
    @Override
    public int getCount() {
        return lists.size();
    }

    //返回当前数据
    @Override
    public Object getItem(int position) {
        return lists.get(position);
    }

    //获取当前ID
    @Override
    public long getItemId(int position) {
        return position;
    }

    //返回当前视图 
    @Override
    public View getView(int position, View convertView, ViewGroup parent) {
        ViewHolder holder ;
        if(convertView==null)
        {
            convertView = LayoutInflater.from(context).inflate(R.layout.call,null);
            holder = new ViewHolder();
            holder.tvName =  (TextView)convertView.findViewById(R.id.tv_Name);
            holder.tvNumber =  (TextView)convertView.findViewById(R.id.tv_Number);
            convertView.setTag(holder);
        }else {
            holder = (ViewHolder)convertView.getTag();
        }
        holder.tvName.setText(lists.get(position).getPhoneName());
        holder.tvNumber.setText(lists.get(position).getPhoneNumber());
        return convertView;
    }
    
    private static class ViewHolder{
        TextView tvName;
        TextView tvNumber;
    }

}
复制代码

5.最后就是主界面代码,至于布局太简单就不列出来了,有兴趣的童鞋可以查看源代码

复制代码
package com.yanis.getmyphonenumber;

import android.app.Activity;
import android.os.Bundle;
import android.widget.ListView;

public class MainActivity extends Activity {
    private ListView listView;
    private MyAdapter adapter;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        GetNumber.getNumber(this);

        initView();
    }

    private void initView() {
        listView =(ListView) findViewById(R.id.listView);
        adapter = new MyAdapter(GetNumber.lists, this);
        listView.setAdapter(adapter);
    }
}
复制代码





本文转自叶超Luka博客园博客,原文链接:http://www.cnblogs.com/yc-755909659/p/4312221.html,如需转载请自行联系原作者
目录
相关文章
|
3月前
|
Android开发 数据安全/隐私保护
安卓手机修改设备id, 安卓硬改一键新机,手机机型修改(伪装)
提供了完整的设备信息修改功能,包含设备模板配置、基础信息修改、网络信息修改、模拟器检测绕
|
3月前
|
存储 人工智能 文字识别
三款安卓手机word编辑器下载,Microsoft Word,wps office,Word手机版,手机word编辑查看阅读器,PDF转换器apk下载
WPS Office是一款功能强大的办公软件,支持文档编辑、表格处理和演示文稿制作,兼容多种格式并提供丰富的云服务。它具备低内存占用、快速运行的特点,支持跨设备同步与多人协作,内置海量模板及AI辅助功能,如智能写作和PPT自动生成。此外,还可扫描文件、编辑PDF并转换为其他格式,极大提升办公效率,适合手机用户便捷操作。
209 1
|
4月前
|
Android开发
安卓硬改一键新机工具,一键修改手机型号,串号网卡Imei、sn码【仅供学习参考】
声明部分:仅供学习参考使用,基于Xposed框架实现的设备信息伪装模块的完整代码,包含多个功能模块:
|
3月前
|
API Android开发 数据安全/隐私保护
|
4月前
|
存储 JSON API
安卓ck提取工具,可提取手机cookie插件,AUTOJS即可实现
怎么用autojs提取手机端的CK?其实autojs是支持提取ck的但是他提取的不是浏览器的CK,二十他自身浏览器环境的c
|
4月前
|
Java Android开发
安卓手机硬改工具, 设备型号修改神器, 安卓硬改一键新机
通过Java创建可执行JAR来修改安卓设备信息。核心功能包括读取系统属性
|
4月前
|
存储 Android开发
一键新机安卓无限, 免root改手机机型, 手机信息修改型号伪装
AndroidManifest.xml配置 资源文件管理 各系统服务的Hook
|
11月前
|
Android开发 数据安全/隐私保护 虚拟化
安卓手机远程连接登录Windows服务器教程
安卓手机远程连接登录Windows服务器教程
2072 5
|
11月前
|
安全 搜索推荐 Android开发
Android vs. iOS:解锁智能手机操作系统的奥秘####
【10月更文挑战第21天】 在当今这个数字化时代,智能手机已成为我们生活中不可或缺的伙伴。本文旨在深入浅出地探讨两大主流操作系统——Android与iOS的核心差异、优势及未来趋势,帮助读者更好地理解这两个平台背后的技术哲学和用户体验设计。通过对比分析,揭示它们如何塑造了我们的数字生活方式,并展望未来可能的发展路径。无论您是技术爱好者还是普通用户,这篇文章都将带您走进一个充满创新与可能性的移动世界。 ####
317 3
|
12月前
|
Android开发 iOS开发 UED
安卓与iOS的较量:谁才是智能手机市场的王者?
本文将深入探讨安卓和iOS两大智能手机操作系统之间的竞争关系,分析它们各自的优势和劣势。通过对比两者在市场份额、用户体验、应用生态等方面的表现,我们将揭示出谁才是真正的市场领导者。无论你是安卓粉丝还是iOS忠实用户,这篇文章都将为你提供一些有趣的观点和见解。

热门文章

最新文章