Android Studio中如何用Anko简化XML加载的CheckBoxPreference获取
实现直接通过ID调用XML加载的CheckBoxPreference(Anko方案)
嘿,这个需求我刚好折腾过!想要像操作btnClose那样直接用ID调用XML里的CheckBoxPreference,Anko虽然没有直接的自动绑定,但可以通过自定义扩展属性来实现类似的便捷效果,完全贴合你想要的使用方式,下面给你详细说:
核心思路
我们都知道kotlin-android-extensions能自动生成View的合成属性,但CheckBoxPreference属于Preference体系,不是View子类,所以没法自动生成。不过Anko的核心就是用Kotlin扩展简化代码,我们可以自己封装findPreference的逻辑,做成扩展属性,这样就能直接用ID名调用了。
具体实现步骤
- 在你的
UIPreference.kt文件里,添加一个针对当前Preference类的扩展属性:
// 假设你的UIPreference是继承自PreferenceFragment或者PreferenceActivity val UIPreference.chAutoRestore: CheckBoxPreference get() = preferenceManager.findPreference(getString(R.string.IsAutoRestore)) as CheckBoxPreference
- 之后你在
UIPreference里就可以像操作btnClose一样直接用chAutoRestore了:
// 比如设置选中状态 chAutoRestore.isChecked = true // 或者监听状态变化 chAutoRestore.setOnPreferenceChangeListener { _, newValue -> // 处理逻辑 true }
补充:如果用Anko DSL构建Preference(可选)
如果你以后想放弃XML,改用Anko的Preference DSL来构建界面,那可以直接在构建时获取引用,更直接:
preferenceScreen { val chAutoRestore = checkBoxPreference { key = getString(R.string.IsAutoRestore) title = "自动恢复" summary = "启动时自动恢复上次状态" } // 直接用chAutoRestore操作 chAutoRestore.isChecked = true }
这个方法在Android Studio 3.1.2和对应的Anko版本(建议用0.10.8,适配当时的Kotlin 1.2)下完全可行,完美解决你不想每次写findPreference的痛点~
内容的提问来源于stack exchange,提问作者HelloCW
相关产品推荐
相关产品推荐

