为什么可组合列表在 Jetpack Compose 中不起作用?

时间:2021-01-06 23:17:17

标签: android android-jetpack-compose

我正在尝试学习撰写,但我不明白为什么列表推断类型是 List<Unit> 而不是 List<()->Unit> 。此外,startingPoint() 中的 setContent 不起作用。

    @Composable
    fun AudioScreen() {
        Text(text = "dhgghf")}
    @Composable
    fun SearchScreen() {Text(text = "dhgghf")}
    

    @Composable
    fun startingPoint() {
        val menurou  = listOf(AudioScreen(),SearchScreen())
        menurou[0]
    }

1 个答案:

答案 0 :(得分:2)

那是因为函数 AudioScreen 和 SearchScreen 返回的是 Unit 而不是 () -> Unit。但这与可组合无关。让我们看下面的例子

fun firstFunction(): () -> Unit = { Unit }

val listForFirstFunction: List<() -> Unit> = listOf(firstFuntion())

fun secondFunction(): Unit = Unit

val listForSecondFunction: List<Unit> = listOf(secondFunction)

因为 firstFunction 返回一个 () -> Unit,listForFirstFunction 的类型得到 () -> Unit。返回 Unit 的 secondFunction 也是如此,因此 listForSecondFunction 的类型是 Unit。

但是如果你想将 secondFunction 保存为 () -> Unit,你可以这样写:

val thirdListForFunction = listOf( {secondFunction()} )

然后让您能够编写 thirdListForFunction[0].invoke()


<块引用>

此外,setContent 中的startingPoint() 不起作用。

我想您是在问为什么 menurou[0] 不能正常工作?那是因为 menurou[0] 只是返回 Unit,而不是所需的函数 AudioScreen()