public class SettingsActivity extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_settings);
getFragmentManager().beginTransaction()
.add(R.id.settingsContainer, new SettingsFragment())
.commit();
}
public static class SettingsFragment extends PreferenceFragment implements SharedPreferences.OnSharedPreferenceChangeListener {
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
addPreferencesFromResource(R.xml.preferences);
}
@Override
public void onResume() {
super.onResume();
getPreferenceScreen().getSharedPreferences().registerOnSharedPreferenceChangeListener(this);
}
@Override
public void onPause() {
super.onPause();
getPreferenceScreen().getSharedPreferences().unregisterOnSharedPreferenceChangeListener(this);
}
@Override
public void onSharedPreferenceChanged(SharedPreferences sharedPreferences, String key) {
if (key.equals("aKey") {
Preference pref = findPreference(key);
pref.setSummary(sharedPreferences.getString(key, ""));
}
}
}
}
当用户改变他的偏好时,他们被听众存储和显示。 重新启动活动后,我丢失了所有摘要,但正确存储了值,因为如果单击每个首选项,则会检索它们。 我想展示以前做过的事情,而不是默认值。
答案 0 :(得分:1)
在注册侦听器之后的onResume()方法中,只需使用每个首选项键调用侦听器。
@Override
public void onResume() {
super.onResume();
getPreferenceScreen().getSharedPreferences().registerOnSharedPreferenceChangeListener(this);
onSharedPreferenceChanged(getPreferenceScreen().getSharedPreferences(), "your_key");
}
答案 1 :(得分:0)
创建片段时,您调用以下方法:
addPreferencesFromResource(R.xml.preferences)
如果xml文件首选项内容是静止的,则在接受onSharedPreferenceChanged时更改另一个首选项文件。
您可以使用方法getActivity().getSharedPreferences()
获取值。