以编程方式为首选项设置defaultValue

3

我有一个需要保存电话号码的EditTextPreference。我希望能够通过编程将此首选项默认为手持设备的电话号码,因此不能使用XML属性android:defaultValue。我该如何操作?以下是我的尝试,但默认值仍然为空:

public class SettingsActivity extends PreferenceActivity
{
    @Override
    protected void onPostCreate(Bundle savedInstanceState)
    {
        super.onPostCreate(savedInstanceState);

        addPreferencesFromResource(R.xml.pref_general);
        TelephonyManager tMgr = (TelephonyManager)getSystemService(Context.TELEPHONY_SERVICE);
        String number = tMgr.getLine1Number();
        ((EditTextPreference)findPreference("phone_number")).setDefaultValue(number);
    }

你尝试使用过 onSetInitialValue(boolean restoreValue, Object defaultValue) 方法吗? - bofredo
我该怎么做?我刚试了一下,但它从未被调用过。 - ashishduh
1个回答

0
我通过在Preference的OnPreferenceChangeListener的onPreferenceChange方法中设置值来解决了这个问题:
    OnPreferenceChangeListener sBindPreferenceSummaryToValueListener = new OnPreferenceChangeListener()
    {
        @Override
        public boolean onPreferenceChange(Preference preference, Object value)
        {
            String stringValue = value.toString();

            if (preference.getKey().equals(PREFS_KEY_PHONE_NUMBER))
            {
                if (TextUtils.isEmpty(stringValue))
                {
                    TelephonyManager tMgr = (TelephonyManager)activity.getSystemService(Context.TELEPHONY_SERVICE);
                    stringValue = tMgr.getLine1Number();
                    ((EditTextPreference)preference).setText(stringValue);
                    preference.setSummary(stringValue);

                    return false;
                }
            }
        }
    }

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接