持续创作,加速成长!这是我参与「掘金日新计划 · 10 月更文挑战」的第14天,点击查看活动详情
接下来会对
Preference Library
官方库进行一个系列讲解,本篇文章是Preference Library
系列的第三篇,主要是介绍Preference Library
中如何实现各式各样的点击事件。
历史文章
练气篇:设置界面的开发利器Preference Library,了解一下~
筑基篇:设置界面的开发利器Preference Library,了解一下~
一. 借助app:fragment
跳转到其他fragment界面
平常设置界面开发中,也会通过某个设置项跳转到某个更加详细设置界面,比如我们常用的手机上的设置界面中,点击开发者选项就会跳转到开发者专门使用的设置界面,这个需求我们可以直接通过app:fragment
实现。
首先我们在主设置界面提供一个开发者选项入口:
<Preference
app:fragment="com.example.m3demo.DevelopFragment"
app:icon="@drawable/ic_launcher_foreground"
app:key="develop"
app:title="开发者选项" />
通过app:fragment
设置了该设置项需要跳转的界面为DevelopFragment
界面。 DevelopFragment
界面的设置项配置如下:
<?xml version="1.0" encoding="utf-8"?>
<PreferenceScreen xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto">
<SwitchPreferenceCompat
app:key="test_usb"
app:title="选择是否开启USB调试" />
<Preference
app:key="dongjie"
app:title="墓碑模式" />
</PreferenceScreen>
class DevelopFragment: PreferenceFragmentCompat() {
override fun onCreatePreferences(savedInstanceState: Bundle?, rootKey: String?) {
setPreferencesFromResource(R.xml.sync_settings, rootKey)
}
}
上面配置完就实现了基本功能,系统会调用接口方法 PreferenceFragmentCompat.OnPreferenceStartFragmentCallback.onPreferenceStartFragment()
(系统会帮助我们默认实现)实现界面跳转,我们看下实现效果:
虽然系统会帮助我们实现PreferenceFragmentCompat.OnPreferenceStartFragmentCallback.onPreferenceStartFragment()
,但是官方界面我们自己实现这个接口:
比如我们会经常用到切换设置界面后,顶部的标题也要发生界面,自定义这个接口就非常方便是这个功能等等。接下来我们看下如何实现:
Activity
实现PreferenceFragmentCompat.OnPreferenceStartFragmentCallback
接口并重写onPreferenceStartFragment()
方法:
class DialogActivity : AppCompatActivity(),
PreferenceFragmentCompat.OnPreferenceStartFragmentCallback{
override fun onPreferenceStartFragment(
caller: PreferenceFragmentCompat,
pref: Preference
): Boolean {
//创建指定fragment
val fragment = supportFragmentManager.fragmentFactory.instantiate(
classLoader,
pref.fragment!!
)
supportFragmentManager.commit {
replace(R.id.contentFl, fragment)
//添加到返回栈
addToBackStack(null)
}
return true
}
}
如果想要向这个跳转的界面传递参数 ,可以在这个设置项下配置extra
标签:
<Preference
app:icon="@drawable/ic_launcher_foreground"
app:key="develop"
app:title="开发者选项">
<extra
android:name="key1"
android:value="value1"/>
<extra
android:name="key2"
android:value="value3"/>
</Preference>
二. 借助跳转到其他Activity
界面
比如我们单独创建Activity
界面显示开发者设置页:
<Preference
app:icon="@drawable/ic_launcher_foreground"
app:key="develop"
app:title="开发者选项">
<intent
android:targetClass="com.example.m3demo.DevelopActivity"
android:targetPackage="com.example.m3demo" />
</Preference>
我们指定了跳转到DevelopActivity
界面,其中还可以配置根据action
等等进行跳转,实现效果和上面的差不多。
三. 借助setOnPreferenceClickListener()
实现点击事件
findPreference<Preference>("develop")?.let {
it.setOnPreferenceClickListener {
//自定义一些点击事件处理
return@setOnPreferenceClickListener true
}
}
总结
本篇文章主要讲解了实现设置项点击事件的三种方式,大家可以根据业务场景选择合适的实现,希望本篇文章能对你有所帮助,如果觉得还不错,可以点个赞哈。