gpt4 book ai didi

android - 使用泛型在 childFragmentManager 中使用 "is"查找 fragment 不可用?

转载 作者:搜寻专家 更新时间:2023-11-01 09:25:58 26 4
gpt4 key购买 nike

我正在尝试在我的 ViewPager 中恢复一个 fragment 以解决一些问题,并编写了一些在正常使用时可以完美运行的代码,但是当我尝试使其成为一个通用函数以重用它时,它不起作用。

无论我尝试在 childFragmentManager.fragments.find lambda 中使用我传入的参数做什么,在尝试进行 IS 检查时,它仍然是红色且无法使用。

工作代码

val studySurveyFragment = if (restoring) {
val fragment = childFragmentManager.fragments.find { it is StudySurveyFragment }
if (fragment == null) {
StudySurveyFragment()
} else {
fragment as StudySurveyFragment
}
} else {
StudySurveyFragment()
}

我对通用版本的尝试

create(StudySurveyFragment(), StudySurveyFragment::class.java)

fun <T> create(fragment: Fragment, fragmentClass: Class<T>): Fragment {
return if (restoring) {
val findFragment = childFragmentManager.fragments.find { it is fragmentClass }
if (findFragment == null) {
fragment
} else {
findFragment
}
} else {
fragment
}
}

更新:我也试过这样做,可以编译,但检查实际上不起作用

childFragmentManager.fragments.find {it.javaClass.isInstance(fragmentClass)}

注意:我知道这可以通过一些 elvis 运算符来减少,但我试图首先让它按预期工作......

最佳答案

你要找的是这样的:

inline fun <reified T : Fragment> FragmentManager.findOrCreateFragment(): T {
return fragments.find { it is T } as T? ?: T::class.java.newInstance()
}

无需传递类引用。

PS:我很确定 fragmentManager.getFragments()(或者在 Kotlin 中,fragmentManager.fragments)曾经是一个受限的 API,但你是对的,它似乎不再如此。

关于android - 使用泛型在 childFragmentManager 中使用 "is"查找 fragment 不可用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50653445/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com