SwitchPreference 以编程方式创建,setChecked 不起作用
SwitchPreference create programmatically, setChecked not working
我要
- 以编程方式创建
SwitchPreference
- 设置
setChecked(true)
就可以了
- 将其添加到
PreferenceGroup
1 和 3 工作正常,但在 3 之后 SwitchPreference
未选中并且点击切换无效(不能 'turned on'/ 选中)。
这是我的 PreferenceFragment
:
public class MyPrefFragment extends PreferenceFragment {
@Override
public void onCreatePreferences(final Bundle savedInstanceState, final String rootKey) {
addPreferencesFromResource(R.xml.prefs);
PreferenceGroup preferenceGroup = (PreferenceGroup) findPreference("pref_cat_1");
SwitchPreference switchPreference = new SwitchPreference(getActivity());
switchPreference.setTitle("new");
switchPreference.setChecked(true);
switchPreference.setDefaultValue(true);
switchPreference.setOnPreferenceChangeListener(new Preference.OnPreferenceChangeListener() {
@Override
public boolean onPreferenceChange(final Preference preference, final Object newValue) {
Toast.makeText(getActivity(), newValue.toString(), Toast.LENGTH_SHORT).show();
return false;
}
});
preferenceGroup.addPreference(switchPreference);
}
}
和我的 PreferenceScreen
:
<?xml version="1.0" encoding="utf-8"?>
<PreferenceScreen xmlns:android="http://schemas.android.com/apk/res/android">
<PreferenceCategory android:title="cat_one">
<SwitchPreference
android:key="pref_1"
android:defaultValue="false"
android:title="fest"/>
</PreferenceCategory>
<PreferenceCategory
android:key="pref_cat_1"
android:title="category"/>
</PreferenceScreen>
如何正确地 setChecked(true)
以编程方式创建的 SwitchPreference?
测试项目为on Github.
The SwitchPreference is not checked and clicks on the toggle have no effect.
在我的机器上检查过。关于点击后的状态,你是完全正确的。那是因为你从 onPreferenceChange()
回调返回 false
。
onPreferenceChange()
的文档:
Returns: true to update the state of the Preference with the new value.
所以,我只将 false
更改为 true
,它按预期工作。
编辑
我是运行API25平板模拟器。然后 运行 在 API 22 模拟器上,它没有工作。非常 st运行ge,它仅在 API 25.
上按预期运行
我在使用 addPreference()
时遇到了同样的问题,但我切换到 preferenceGroup.addItemFromInflater(switchPreference)
并且效果很好。
我要
- 以编程方式创建
SwitchPreference
- 设置
setChecked(true)
就可以了 - 将其添加到
PreferenceGroup
1 和 3 工作正常,但在 3 之后 SwitchPreference
未选中并且点击切换无效(不能 'turned on'/ 选中)。
这是我的 PreferenceFragment
:
public class MyPrefFragment extends PreferenceFragment {
@Override
public void onCreatePreferences(final Bundle savedInstanceState, final String rootKey) {
addPreferencesFromResource(R.xml.prefs);
PreferenceGroup preferenceGroup = (PreferenceGroup) findPreference("pref_cat_1");
SwitchPreference switchPreference = new SwitchPreference(getActivity());
switchPreference.setTitle("new");
switchPreference.setChecked(true);
switchPreference.setDefaultValue(true);
switchPreference.setOnPreferenceChangeListener(new Preference.OnPreferenceChangeListener() {
@Override
public boolean onPreferenceChange(final Preference preference, final Object newValue) {
Toast.makeText(getActivity(), newValue.toString(), Toast.LENGTH_SHORT).show();
return false;
}
});
preferenceGroup.addPreference(switchPreference);
}
}
和我的 PreferenceScreen
:
<?xml version="1.0" encoding="utf-8"?>
<PreferenceScreen xmlns:android="http://schemas.android.com/apk/res/android">
<PreferenceCategory android:title="cat_one">
<SwitchPreference
android:key="pref_1"
android:defaultValue="false"
android:title="fest"/>
</PreferenceCategory>
<PreferenceCategory
android:key="pref_cat_1"
android:title="category"/>
</PreferenceScreen>
如何正确地 setChecked(true)
以编程方式创建的 SwitchPreference?
测试项目为on Github.
The SwitchPreference is not checked and clicks on the toggle have no effect.
在我的机器上检查过。关于点击后的状态,你是完全正确的。那是因为你从 onPreferenceChange()
回调返回 false
。
onPreferenceChange()
的文档:
Returns: true to update the state of the Preference with the new value.
所以,我只将 false
更改为 true
,它按预期工作。
编辑
我是运行API25平板模拟器。然后 运行 在 API 22 模拟器上,它没有工作。非常 st运行ge,它仅在 API 25.
上按预期运行我在使用 addPreference()
时遇到了同样的问题,但我切换到 preferenceGroup.addItemFromInflater(switchPreference)
并且效果很好。