我有一個首選片段,它們上面有一些EditTextPreference項目。每次我加載首選項片段時,顯示的值都是默認值,存儲在sharedPreferences中的值是默認值。如何在菜單加載時讓這些編輯文本始終顯示來自sharedPreferences的文本?我試圖使用片段訪問sharedPreferences:EditTextPreference始終顯示加載時的默認摘要android
SharedPreferences def = getActivity().getPreferences(0);
Log.v("Something", def.getString("relay1_name", "no"));
,但如果我嘗試訪問任意鍵我剛剛得到的默認文本後面。文本輸入被保存在sharedPreferences中,因爲如果我點擊一個editText,那麼我設置的文本就已經準備好了,它只是摘要顯示了默認文本。 非常感謝您的幫助,我很可能錯過了一些非常簡單的事情。
XML的喜好屏幕
<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延伸活動{
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
}
}
首選項片段本身
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);
}
}
Thankyou爲你的答案,不幸getSharedPreferences()沒有字,因爲它需要一個上下文作爲一個片段沒有的參數。然而,我確實解決了這個問題 - SharedPreferences def = getPreferenceScreen()。getSharedPreferences();直接訪問首選項屏幕的sharedPreferences。 –