Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/kotlin/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 科特林一直说我的返回类型是错误的_Android_Kotlin - Fatal编程技术网

Android 科特林一直说我的返回类型是错误的

Android 科特林一直说我的返回类型是错误的,android,kotlin,Android,Kotlin,我想返回一个特定的片段,但Kotlin一直说PlusOneFragment和BlankFragment不是片段 以下是我在主要活动中的方法: private fun getHomeFragment(): Fragment { when (navItemIndex) { 0 -> return PlusOneFragment() 1 -> return BlankFragment() else -> return Plus

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

以下是我在主要活动中的方法:

private fun  getHomeFragment(): Fragment {
    when (navItemIndex) {
        0 -> return PlusOneFragment()
        1 -> return BlankFragment()
        else -> return PlusOneFragment()
    }
}
这就是我的班级定义:

class PlusOneFragment : Fragment() {…}

我要怎么做才能解决这个问题呢?

在Kotlin中,when是一个具有返回值的表达式。以下是如何使用这些知识更改函数:

private fun getHomeFragment(): Fragment {
    return when (navItemIndex) {
        0 -> PlusOneFragment()
        1 -> BlankFragment()
        else -> PlusOneFragment()
    }
}
但是,您可以选择将其用作如下语句(非常类似于Java switch语句):

另外,看看您的逻辑,因为navItemIndex中除1之外的任何内容都会返回PlusOneFragment,您可以将其简化为if(这也是Kotlin中的一个表达式),如下所示:

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

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

如果我的第一个答案不是真正的解决方案,那么@zsmb13的评论似乎更正确。他说,


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


这就是他所说的。实际上,Android开发人员可以轻松访问Fragment的几个不同版本。这是很容易和很常见的得到这些困惑。我自己做过不止一次。如果您在一个文件中导入其中一个文件,而在另一个文件中导入另一个文件,您将得到的错误消息可能会令人困惑,关于片段的某些内容不是片段。检查导入过程,确保在所有地方都导入相同的片段类。

会出现什么异常?文件中可能导入了不同的片段。检查您是否在各地使用支持库中的一个。这就是zsmb13所说的,这是一个如此愚蠢的问题。我如何将问题设置为已回答或已解决?回答很好,但他的初始尝试应该有效,因为当
表达式是详尽的,并且他在每个分支中都有
返回值。很好,我不知道你可以返回when(),这真的很好,但问题是fragment的不同版本,我的代码在我改变了它之后实际上工作了,就像我在@zsmb13 comment下写的那样,这就是问题所在。在Java中,您通常会得到一个适当的警告,但在Kotlin中,情况并非如此
private fun getHomeFragment(): Fragment = if (navItemIndex == 1) BlankFragment() else PlusOneFragment()