问题描述
我正在尝试使用Android tutorial来构建设置屏幕。在我的PreferenceCompatFragment子类中,我需要完成以下任务。
任务3不能按预期工作,我希望有人可以告诉我我做错了什么。
我的实现如下:
片段
class MyPreferencesFragment : PreferenceFragmentCompat() {
. . . . . Other methods . . . . .
@Override
fun onActivityCreated(savedInstanceState: Bundle?) {
val viewmodel = viewmodelProvider(this).get(Myviewmodel::class.java)
val screen = getPreferenceScreen()
val preferencesCategory = PreferenceCategory(preferenceManager.context)
viewmodel.fetchedPreferences.observe(this,Observer {
preferencesList ->
preferencesList?.forEach {
Preference preference = CheckBoxPreference(preferenceManager.context)
preference.title = it.title
preference.key = it.key
preference.summary = it.summary
preferenceCategory.addPreference(preference);
}
}
viewmodel.fetchServerPreferences("HomePage");
screen.addPreference(preferencesCategory)
// Call scrolling function
callScrollingFunction()
}
private fun callScrollingFunction() {
val preferencetobedeepLinked = activity?.intent?.getStringExtra("preference");
if (preferencetobedeepLinked.isNullOrEmpty()) {
return
}
scrollToPreference(preferencetobedeepLinked); // This does not work.
}
@Override
fun onCreatePreferences(savedInstance: Bundle?,roottag: String?) {
val context = preferenceManager.context
preferenceScreen = preferenceManager.createPreferenceScreen(context)
}
}
PreferenceValueData
data class PreferenceValueData(val key: String,val title: String,val summary: String)
查看模型
class Myviewmodel: viewmodel() {
val repository;
init {
repository = MyRepository() // Invokes the service
}
private _preferenceLiveData = mutablelivedata<List<PreferenceValueData>>()
fetchedPreferences : LiveData<List<PreferenceValueData>>
get() = _preferenceLiveData
/** Fetches preferences for a page **/
fun fetchServerPreferences(page: String) {
viewmodelScope.launch {
val preferences: List<PreferenceValueData> = repository.fetchPreferences(page) // Invokes the service in a dispatch.IO context and returns the response. This works
fetchedPreferences.value = if (!preferences.isNullOrEmpty()) ? preferences: null
}
}
}
从后端获取首选项会导致一定程度的延迟。在致电scrollToPreference之前,如何确保已创建首选项?我已经能够确认我已经传递了有效的首选项密钥,并且与所述密钥相关联的首选项。
PreferenceCompatFragment#scrollToPreference(String)
调用内部函数scrollToPreferenceInternal(String,Preference),该内部函数依次调用PreferenceGroupAdapter#getPreferenceAdapterPosition,该函数查找可见的行,当调用观察者时可能不会创建该行。加载所有首选项后如何滚动?
解决方法
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)