【发布时间】:2016-08-10 04:00:46
【问题描述】:
我的一个新的 android 项目需要一些帮助。让我快速解释一下结构。
我的项目有一个 MainActivity,在活动中我有 3 个片段,可通过应用程序上的选项卡访问。在我的最后一个标签/片段中,我试图列出手机上的所有联系人以及图片、姓名和号码。我遇到了以下名称和号码的代码:
Cursor phones = getContentResolver().query(ContactsContract.CommonDataKinds.Phone.CONTENT_URI, null, null, null, null);
while (phones.moveToNext()) {
String name = phones.getString(phones.getColumnIndex(ContactsContract.CommonDataKinds.Phone.DISPLAY_NAME));
String phoneNumber = phones.getString(phones.getColumnIndex(ContactsContract.CommonDataKinds.Phone.NUMBER));
//Toast.makeText(getApplicationContext(),name, Toast.LENGTH_LONG).show();
String full = name + " " + phoneNumber;
}
如果我将以下代码放在我的片段中并更改某些引用(如 getContentResolver().query(ContactsContract.CommonDataKinds.Phone.CONTENT_URI, null, null, null, null);),则以下代码就像一个魅力。
给getActivity().getContentResolver().query(ContactsContract.CommonDataKinds.Phone.CONTENT_URI, null, null, null, null);
无论如何,所以我已经能够让它工作,但是遇到了一些问题,比如在左侧列出带有图像的联系人,所以我遇到了一个 YouTube 教程 Android BaseAdapter Tutorial。经过大量的面谈并试图弄清楚到底发生了什么(我是 Android 开发的新手),我终于完成了前 2 个教程并遇到了一个小问题。
尝试创建联系人的访问权限(使用此问题中的第一段代码)我发现我无法这样做,因为函数 getContentResolver() 不可访问,除非它位于 Activity 中。这是我的 BaseAdapter 的当前代码:Android BaseAdapter Test Code - Paste Bin。
如果有人可以指导我解决此问题的最佳方法,那将对我大有帮助。
顺便说一句,有没有更好的方法来访问联系人,只需简单地列出他们的图片、姓名和号码?也许是图书馆?任何超级简单的作品; WhatsApp 甚至喜欢联系人列表,还是 Viber?谢谢!
【问题讨论】:
-
在适配器的构造函数中添加上下文参数并将其存储在实例中。只要您的适配器不是静态存储或将上下文存储在静态变量中,这是最简单的方法。更好的是,获取适配器之外的联系人,然后简单地将列表分配给适配器。
标签: android android-contacts baseadapter