EditTextPreference在加载android时始终显示默认摘要

时间:2012-10-15 15:40:36

标签: android sharedpreferences android-preferences edittextpreference

我有一个首选项片段,它们上面有一些EditTextPreference项。每次加载首选项片段时,显示的值都是默认值,另一个是存储在sharedPreferences中的值。当菜单加载时,如何让这些编辑文本始终显示sharedPreferences中的文本?我尝试使用以下方法从片段访问sharedPreferences:

SharedPreferences def = getActivity().getPreferences(0);
Log.v("Something", def.getString("relay1_name", "no"));

但如果我尝试访问任何密钥,我只需返回默认文本。文本输入正在保存在sharedPreferences中,因为如果我单击一个editText,我所设置的文本已经全部已经存在,它只是摘要显示默认文本。 提前感谢您的帮助,我很可能会遗漏一些非常简单的事情。

xml for preferences screen

<PreferenceScreen xmlns:android="http://schemas.android.com/apk/res/android">
<PreferenceCategory

    android:title="@string/prefs_relay_title">
    <EditTextPreference
        android:dialogTitle="Relay1"
        android:key="relay1_name"
        android:summary="Relay 1"
        android:title="Relay 1"
        android:defaultValue="Relay 1" />

</PreferenceCategory>
</PreferenceScreen>

创建片段的动作     公共类PrefsActivity扩展了Activity {

public static final String PREFS_NAME = "prefs";

@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);

    getFragmentManager().beginTransaction().replace(android.R.id.content, new PrefsFragment()).commit();    // Load the prefs screen up 
 }
}

prefs片段本身

public class PrefsFragment extends PreferenceFragment implements OnSharedPreferenceChangeListener {

//public static final String PREFS_NAME = "prefs";

@Override
public void onCreate(Bundle savedInstanceState) {

    Log.v("PrefsFragment", "Creating prefs fragment");

    super.onCreate(savedInstanceState);
    addPreferencesFromResource(R.xml.prefs_xml);

    getPreferenceScreen().getSharedPreferences().registerOnSharedPreferenceChangeListener(this);

}

void loadDefaults() {

    SharedPreferences def = getActivity().getPreferences(0);
    Log.v("Something", def.getString("relay1_name", "no"));

}

@Override
public void onSharedPreferenceChanged(SharedPreferences sharedPreferences, String key) {

    if (key.equals("relay1_name")){
        Preference connectionPref = findPreference(key);
        connectionPref.setSummary(sharedPreferences.getString(key, ""));

}

@Override
public void onResume() {
    super.onResume();
    getPreferenceScreen().getSharedPreferences()
            .registerOnSharedPreferenceChangeListener(this);
}

@Override
public void onPause() {
    super.onPause();
    getPreferenceScreen().getSharedPreferences()
            .unregisterOnSharedPreferenceChangeListener(this);
}

}

1 个答案:

答案 0 :(得分:1)

我认为PreferenceScreen使用应用默认的共享偏好设置,而您的片段正在使用getActivity().getPreferences()

查看活动文档中的getPreferences(),它不会检索应用程序共享首选项,而是检索特定活动专用的首选项。我认为这与PreferenceScreen存储的内容不同。

我可能会建议你替换

SharedPreferences def = getActivity().getPreferences(0);

SharedPreferences def = PreferenceManager.getDefaultSharedPreferences();

看看是否有帮助。