Kotlin总是说我的返回类型是错误的

我想要返回一个特定的片段,但Kotlin一直说PlusOneFragment和BlankFragment不是片段

这是我的MainActivity中的方法:

private fun getHomeFragment(): Fragment { when (navItemIndex) { 0 -> return PlusOneFragment() 1 -> return BlankFragment() else -> return PlusOneFragment() } } 

这就是我的班级定义:

 class PlusOneFragment : Fragment() {…} 

我需要做些什么来解决这个问题?

看起来来自@ zsmb13的评论是更正确的,如果我的第一个答案不是真正的解决方案。 他说:

您的文件中可能导入了不同的片段。 检查你使用的支持库到处都是。

这是他正在谈论的。 实际上,Android开发人员可以轻松访问Fragment的几个不同版本, 一个在支持包中 , 一个在标准库中 。 弄糊涂很容易,也很常见。 我自己做了不止一次。 如果您将其中一个文件导入到一个文件中,并将另一个文件导入另一个文件中,那么您将得到的错误信息可能会令人困惑,关于Fragment的一些内容不是片段。 通过你的导入,并确保你导入相同的片段类到处。

在Kotlin中,何时是具有返回值的表达式。 这里是你如何使用这些知识来改变你的功能:

 private fun getHomeFragment(): Fragment { return when (navItemIndex) { 0 -> PlusOneFragment() 1 -> BlankFragment() else -> PlusOneFragment() } } 

但是,您可以选择将其用作以下语句(非常类似于Java switch语句):

 private fun getHomeFragment(): Fragment { var result when (navItemIndex) { 0 -> result = PlusOneFragment() 1 -> result = BlankFragment() else -> result = PlusOneFragment() } return result } 

此外,看看你的逻辑,因为navItemIndex以外的任何东西都会返回一个PlusOneFragment,所以你可以把它简化为一个if(这也是Kotlin中的一个表达式),如下所示:

 private fun getHomeFragment(): Fragment { return if (navItemIndex == 1) BlankFragment() else PlusOneFragment() } 

甚至

 private fun getHomeFragment(): Fragment = if (navItemIndex == 1) BlankFragment() else PlusOneFragment()