微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

java – PreferenceFragment.findPreference总是返回NULL

我正在尝试进行一个设置菜单,将显示一个MultiSelectListPreference,从您的联系人列表中选择多个联系人.

在这一刻,我收到一个NullPointerException,当我尝试MultiSelectListPreference#setEntryValue(CharSequence [])如果我把setEntries放在第一位,那一个抛出相同的异常.

我已经放了一个断点,一步一步看到会发生什么.变量被填充,因为它们存储字符串,它们可以包含一个字符串“null”,所以我猜它没有失败,如果没有display_Name可用等等.

我基于findPreference的例子为this answer

任何人都有想法?如果您需要更多信息,请告诉我.谢谢阅读!

package be.wdk.sendtowork;contactNumberArray

import android.database.Cursor;
import android.os.Bundle;
import android.preference.MultiSelectListPreference;
import android.preference.PreferenceFragment;
import android.provider.ContactsContract;
import android.util.Log;
import android.widget.Toast;

public class PreferenceClass extends PreferenceFragment {
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        Integer countContacts = 0;

        String[] projection = new String[]{
                ContactsContract.CommonDataKinds.Phone.disPLAY_NAME,ContactsContract.CommonDataKinds.Phone.NUMBER,ContactsContract.CommonDataKinds.Phone.PHOTO_URI
        };

        String selection = ContactsContract.CommonDataKinds.Phone.HAS_PHONE_NUMBER;
        String sortOrder = ContactsContract.CommonDataKinds.Phone.disPLAY_NAME;
        try {
            Cursor c1 = getActivity().getContentResolver().query(ContactsContract.CommonDataKinds.Phone.CONTENT_URI,projection,selection,null,sortOrder);
            c1.movetoFirst();
            Integer c1columncount = c1.getColumnCount();
            Integer c1count = c1.getCount();
            Toast toastje = Toast.makeText(getActivity(),c1columncount.toString() + " - " + c1count.toString(),Toast.LENGTH_SHORT);
            toastje.show();

            CharSequence[] contactNameArray = new CharSequence[c1count],contactNumberArray = new CharSequence[c1count];
            MultiSelectListPreference mslp = (MultiSelectListPreference) findPreference("contactList");
            do {
                contactNameArray[countContacts] = c1.getString(0) + " - " + c1.getString(2);
                contactNumberArray[countContacts] = c1.getString(1);
                countContacts += 1;
            } while(c1.movetoNext());

            mslp.setEntryValues(contactNumberArray); //<- line that throws the error
            mslp.setEntries(contactNameArray);
            addPreferencesFromresource(R.xml.preferences);
        } 
        catch (Exception e) {
            Log.v("TAG"," " + e.toString());
            e.getMessage();
        }
    }
}

编辑:好的,我做了更多的检查.
– 我在我的XML中做了一个测试偏好,并使用findPrefence使它的一个对象与 – >返回NULL
– 我已经将我的MultiSelectListPreference的键设置为@ string / test,将其放在我的strings.xml中,findpreference仍然返回Null.

我的PreferenceFragment可能有问题吗?

解决方法

好的,我发现我的问题是什么.
MultiSelectListPreference mslp = (MultiSelectListPreference) findPreference("contactList");

返回NULL因为

addPreferencesFromresource(R.xml.preferences);

在开始时没有完成,所以没有加载我的偏好.

原文地址:https://www.jb51.cc/java/122817.html

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐