我需要一些新的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开发的新手)后,我终于完成了前两个教程并找到了一个小问题。
尝试创建对联系人的访问权限(使用此问题中的第一个代码块)我发现我不能这样做,因为函数getContentResolver()
不可访问,除非它在Activity中。以下是我的BaseAdapter的当前代码:Android BaseAdapter Test Code - Paste Bin。
如果有人可以指导我采用最佳方法来解决这个问题,那将对我有所帮助。
另一方面,有没有更好的方式来访问联系人,只是简单地列出图片,名称和号码?图书馆可能吗?任何超级简单的作品; WhatsApp甚至是联系人列表,还是Viber?谢谢!
答案 0 :(得分:3)
要拨打getContentResolver()
您需要活动的Context
对象,您必须在使用BaseAdapter
课程时执行此操作。
<强> 1。通过构造函数传递它 -
适配器内部:
public class MyBaseAdapter extends BaseAdapter {
private Context context;
public MyBaseAdapter (Context context) {
this.context = context;
}
// Do your stuff
}
在您的活动中:
MyBaseAdapter myBaseAdapter = new MyBaseAdapter(getApplicationContext());
<强> 2。从视图中获取上下文 -
public class MyBaseAdapter extends BaseAdapter {
//BaseAdpter stuff
@Override
public View getView(int position, View convertView, ViewGroup parent) {
if(inflater == null){
Context context = parent.getContext();
}
//BaseAdpter stuff
return convertView;
}
}
然后拨打context.getContentResolver()
。