我有一个设置片段,可以使用默认设置页面加载xml,我还为一个特定的首选项添加了一个单击侦听器
@Override
public void onCreate(@Nullable Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
// Load the preferences from an XML resource
addPreferencesFromResource(R.xml.settings);
preferences.findPreference(getString(R.string.pref_custom_list)).setOnPreferenceChangeListener(this);
//other stuff.....
这很好用,当用户单击触发事件时,我可以检查有关开关的一些信息,包括拒绝更改...
但是我想在同一屏幕上打开/关闭其他开关
我试图
preferences.findPreference(getString(R.string.xpto)).setEnabled(true);
但是它不会打开或关闭任何开关...它只是将视图设置为启用或禁用点击
如果我做类似的事情
PreferenceManager.getDefaultSharedPreferences(this).edit().putBoolean("xpto",true).apply();
它的确更改了首选项,但更改未加载到屏幕上,因此用户不知道
我如何以编程方式打开或关闭某些首选项,并使其反映到首选项屏幕
答案 0 :(得分:3)
您可以使用SwitchPreferenceCompat
。
<SwitchPreferenceCompat
app:key="key"
app:title="Some Confs" />
如果您如上所述使用SwitchPreferenceCompat
,请在片段中尝试一下。
SwitchPreferenceCompat switchPref = findPreference("key");
switchPref.setChecked(true);
答案 1 :(得分:1)
您要查找的是setChecked()
,而不是setEnabled()
:
preferences.findPreference(getString(R.string.xpto)).setChecked(true);
答案 2 :(得分:0)
我认为您需要在SharedPreferences
更改时实现一个侦听器。
SharedPreferences.OnSharedPreferenceChangeListener spChanged = new
SharedPreferences.OnSharedPreferenceChangeListener() {
@Override
public void onSharedPreferenceChanged(SharedPreferences sharedPreferences,
String key) {
// change the Switch Preference state here
}
};
然后,当首选项更改时,您可以更改用户的屏幕以使其匹配。
供您参考: