在BaseAdapter中访问getContentResolver()

时间:2016-08-10 04:00:46

标签: android android-contacts baseadapter

我需要一些新的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?谢谢!

1 个答案:

答案 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()