科特林一直说我的回归类型错了

时间:2017-07-27 19:04:55

标签: android kotlin

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

以下是我的MainActivity中的方法:

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

这就是我的班级定义:

class PlusOneFragment : Fragment() {…}

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

2 个答案:

答案 0 :(得分:2)

在Kotlin中,when是一个具有返回值的表达式。以下是使用这些知识改变功能的方法:

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的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()

答案 1 :(得分:2)

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

  

您可能在文件中导入了不同的片段。校验   您在任何地方都使用支持库中的那个。

这是他在说什么。实际上,Android开发人员one in the support packageone in the standard libraries可以轻松访问几个不同版本的Fragment。让这些困惑很容易也很常见。我不止一次自己完成了这件事。如果您在一个文件中导入其中一个并将另一个文件导入另一个文件中,您将收到的错误消息可能会令人困惑,而Fragment的某些内容并不是片段。浏览导入并确保在任何地方导入相同的Fragment类。