我从用户那里获取IP,端口和设备名称设置,并在初始化对象时使用它们。但是,当我进行设置时,这些设置不会在应用程序中更新,直到我重新启动应用程序。
这是我的设置文件 -
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
addPreferencesFromResource(R.layout.settings);
SharedPreferences sp = getPreferenceScreen().getSharedPreferences();
EditTextPreference editTextPrefLAN = (EditTextPreference) findPreference("prefABCLan");
editTextPrefLAN
.setSummary(sp.getString("prefABCLan", "Set your LAN IP"));
EditTextPreference editTextPrefPort = (EditTextPreference) findPreference("prefABCPort");
editTextPrefPort
.setSummary(sp.getString("prefABCPort", "Set your port"));
EditTextPreference editTextPrefDeviceName = (EditTextPreference) findPreference("prefABCDeviceName");
editTextPrefDeviceName
.setSummary(sp.getString("prefABCDeviceName", "Set your device name"));
/*EditTextPreference editTextPrefScopeIP = (EditTextPreference) findPreference("prefScopeIP");
editTextPrefScopeIP
.setSummary(sp.getString("prefScopeIP", "Set your Scope IP"));
EditTextPreference editTextPrefScopeLogin = (EditTextPreference) findPreference("prefScopeLogin");
*/
}
protected void onResume() {
super.onResume();
getPreferenceScreen().getSharedPreferences()
.registerOnSharedPreferenceChangeListener(this);
}
protected void onStop() {
super.onStop();
getPreferenceScreen().getSharedPreferences()
.registerOnSharedPreferenceChangeListener(this);
}
protected void onPause() {
super.onPause();
getPreferenceScreen().getSharedPreferences()
.unregisterOnSharedPreferenceChangeListener(this);
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
MenuInflater inflater = getMenuInflater();
inflater.inflate(R.menu.actionbar, menu);
return true;
}
public void onSharedPreferenceChanged(SharedPreferences sharedPreferences,
String key) {
Preference pref = findPreference(key);
if (pref instanceof EditTextPreference) {
EditTextPreference etp = (EditTextPreference) pref;
pref.setSummary(etp.getText());
}
}
我的代码中有什么需要做的吗?
答案 0 :(得分:1)
当用户修改PreferenceActivity
中的偏好设置时,您仍需要在应用中的其他位置执行某些操作才能使用这些首选项。如果您之前阅读了首选项,现在需要更改的值,则尤其如此。
一种方法就是重新加载首选项,方法是将您的首选项读取逻辑放在onResume()
等生命周期方法中,当创建活动/片段时,它将被称为 和,当用户访问PreferenceActivity
后返回到屏幕。
另一种方法是在其他组件中使用OnSharedPreferenceChangeListener
,就像在此处使用它一样。关注偏好更改的活动(或片段或其他)将注册OnSharedPreferenceChangeListener
并注意相关更改。