使用CheckBoxPreference的坑
最近在使用CheckBoxPreference这个组件时遇到一些小问题,记录一下,方便以后有和我一样的人再次踩坑。
在使用这个组件是发现setOnPreferenceChangeListener这个监听不管用,没反应,只有在点击整个Item的时候才行,如果是点击后面的图标是没有反应的,可以说是系统的一个bug吧。
在查看源码后发现,发现CheckBox根本就没有设置监听事件,所以也就肯定不会监听到了。
怎么修复这个问题了,那就只能继承CheckBoxPreference后,覆盖onBindView方法,获取到checkbox后,自己设置一个setOnPerformCheckedChangeListener事件,具体如下:
public class SettingCheckBoxPreference extends CheckBoxPreference {
public SettingCheckBoxPreference(Context context, AttributeSet attrs, int defStyleAttr) {
super(context, attrs, defStyleAttr);
}
public SettingCheckBoxPreference(Context context, AttributeSet attrs) {
super(context, attrs);
}
public SettingCheckBoxPreference(Context context) {
super(context);
}
@Override
protected void onBindView(View view) {
super.onBindView(view);
View checkboxView = view.findViewById(android.R.id.checkbox);
if (checkboxView != null && checkboxView instanceof SlidingButton) {
((SlidingButton) checkboxView).setOnPerformCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() {
@Override
public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
callChangeListener(isChecked);
setChecked(isChecked);
}
});
}
}
}
<PreferenceScreen xmlns:android="http://schemas.android.com/apk/res/android" android:title="@string/option_about" >
<com.xxx.view.SettingCheckBoxPreference android:key="UserAgreementKey" android:title="@string/revoke_title" android:summary="@string/revoke_desc">
</com.xxx.view.SettingCheckBoxPreference>
</PreferenceScreen>
今天的文章使用CheckBoxPreference的一个坑分享到此就结束了,感谢您的阅读。
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
如需转载请保留出处:https://bianchenghao.cn/59669.html