我有一个偏好片段,上面有一些 EditTextPreference 项目。每次我加载首选项片段时,显示的值都是默认值,其中一个是存储在 sharedPreferences 中的值。当菜单加载时,如何让这些编辑文本始终显示来自 sharedPreferences 的文本?我尝试使用以下方法从片段中访问 sharedPreferences:
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>
创建片段的操作 public class PrefsActivity extends 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
}
}
首选项片段本身
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);
}
}