Ema*_*een 28 settings android refresh preferenceactivity
根据以下代码,您能告诉我如何刷新PreferenceActivity窗口以立即显示设置中的更改吗?例如:用户点击主chime切换复选框为true(勾选),我希望用户立即看到其他设置,如ChimeOn15Past复选框也是true(勾选)
SharedPreferences.Editor prefEditor = clockSettings.edit(); // Allow the settings to be changed.
if (booleanMasterChimeToggle == true) {
prefEditor.putBoolean("ChimeOnTheHour", true);
prefEditor.putBoolean("ChimeOn15Past", true);
prefEditor.putBoolean("ChimeOn30Past", true);
prefEditor.putBoolean("ChimeOn45Past", true);
strNotifyMessage = "Full chiming has now been set.";
} else {
prefEditor.putBoolean("ChimeOnTheHour", false);
prefEditor.putBoolean("ChimeOn15Past", false);
prefEditor.putBoolean("ChimeOn30Past", false);
prefEditor.putBoolean("ChimeOn45Past", false);
strNotifyMessage = "Full chiming has now been disabled.";
}
Run Code Online (Sandbox Code Playgroud)
Sol*_*n14 40
代替
finish();
startActivity(getIntent());
Run Code Online (Sandbox Code Playgroud)
我更喜欢以下代码:
setPreferenceScreen(null);
addPreferencesFromResource(R.xml.preferences);
Run Code Online (Sandbox Code Playgroud)
这也将重置显示器,但没有整个完成程序及其后果.此外,此代码适用于PreferenceActivity和PreferenceFragment.
如果您想动态更改区域设置值,这很有趣.在这种情况下,与经理合作是不够的,因为您需要完全重新加载标题和值.
编辑:setPreferenceScreen已弃用PreferenceActivity(仍在工作)但不在PreferenceFragment
Joe*_*Joe 30
尼古拉的回答是正确的.我只是想在这里添加一些代码来更清楚地说明他的观点.
private CheckBoxPreference mOn15Past;
private CheckBoxPreference mOn30Past;
private CheckBoxPreference mOn45Past;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
// Load the preferences from an XML resource
addPreferencesFromResource(R.xml.preferences);
mOn15Past = (CheckBoxPreference) findPreference("ChimeOn15Past");
mOn30Past = (CheckBoxPreference) findPreference("ChimeOn30Past");
mOn45Past = (CheckBoxPreference) findPreference("ChimeOn45Past");
final Preference chimeMaster = findPreference("ChimeMaster");
chimeMaster.setOnPreferenceChangeListener(new OnPreferenceChangeListener() {
@Override
public boolean onPreferenceChange(Preference preference, Object newVal) {
final boolean value = (Boolean) newVal;
mOn15Past.setChecked(value);
mOn30Past.setChecked(value);
mOn45Past.setChecked(value);
return true;
}
});
}
Run Code Online (Sandbox Code Playgroud)
简而言之,PreferenceActivity它不是设计为在启动后从持久存储中刷新其值.您不必SharedPreferences.Editor像在代码中那样修改和提交其他更改,而是将更改更改为PreferenceManager将PreferenceActivity在其正常生命周期中提交的本地对象.
Mar*_*ski 13
有一种简单的方法可以立即刷新列表中的所有项目.只需执行以下操作:
getPreferenceScreen().removeAll();
addPreferencesFromResource(R.xml.preferences);
Run Code Online (Sandbox Code Playgroud)
使用这种方法,您不会失去ListView的位置.
| 归档时间: |
|
| 查看次数: |
31613 次 |
| 最近记录: |