【问题标题】:Access getContentResolver() inside of a BaseAdapter在 BaseAdapter 中访问 getContentResolver()
【发布时间】: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


【解决方案1】:

为了调用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()

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-04-14
    相关资源
    最近更新 更多