以编程方式为Preference设置defaultValue

时间:2013-09-25 15:34:05

标签: android

我有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);
    }

1 个答案:

答案 0 :(得分: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;
                }
            }
        }
    }