首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >使用泛型在childFragmentManager中查找片段使用“不可用”吗?

使用泛型在childFragmentManager中查找片段使用“不可用”吗?
EN

Stack Overflow用户
提问于 2018-06-02 12:13:51
回答 1查看 502关注 0票数 2

我正在尝试在rotate上恢复我的ViewPager中的片段以解决一些问题,并编写了一些代码,这些代码在正常使用时可以很好地工作,但当我试图将其作为泛型函数重用时,它不起作用。

无论我试图使用传入的参数在childFragmentManager.fragments.find中做什么,在尝试执行IS检查时,它都将保持为红色且不可用。

工作代码

代码语言:javascript
复制
val studySurveyFragment = if (restoring) {
            val fragment = childFragmentManager.fragments.find { it is StudySurveyFragment }
            if (fragment == null) {
                StudySurveyFragment()
            } else {
                fragment as StudySurveyFragment
            }
        } else {
            StudySurveyFragment()
        }

我对泛型版本的尝试

代码语言:javascript
复制
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
        }
    }

更新:我也尝试过这样做,它会编译,但检查实际上并不起作用

代码语言:javascript
复制
childFragmentManager.fragments.find {it.javaClass.isInstance(fragmentClass)}

注意:我知道使用一些elvis操作符可以减少这一点,但我首先试图让它像预期的那样工作……

EN

回答 1

Stack Overflow用户

发布于 2018-06-02 12:46:40

看起来我不需要泛型就能做到这一点。但经过进一步考虑后,在可以使用clazz.newInstance()的地方使用泛型,而不是创建要检查的类,将会更有效,所以如果有方法可以做到这一点,我更喜欢它。

代码语言:javascript
复制
fun create(fragment: Fragment): Fragment {
        return if (restoring) {
            val findFragment =
                childFragmentManager.fragments.find { it.javaClass.isInstance(fragment) }
            if (findFragment == null) {
                fragment
            } else {
                findFragment
            }
        } else {
            fragment
        }
    }

可以缩写为这个,也意识到如果它不恢复,它们无论如何都会是空的…

代码语言:javascript
复制
fun findOrCreate(fragment: Fragment): Fragment {
     return childFragmentManager.fragments.find { it.javaClass.isInstance(fragment) } ?: fragment
}
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/50653445

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档