如何解决Kotlin Android中Array Pair的错误

问题描述 投票:0回答:2
fun sharedElementTransition(view: View) {
     val pair: Array<Pair<View, String>> = Array<Pair<View,String>>(size = 3) /ht/getting issue 
     pair[0] = Pair<View,String>(imglogo, "logo_shared")
     pair[1] = Pair<View,String>(txvshared, "smartherd_shared")
     pair[2] = Pair<View,String>(imgProfilepic, "pic_shared")
     var options : ActivityOptions = ActivityOptions.makeSceneTransitionAnimation(this, *pair)

在Parameter Init中没有传值。另外,Pair中还有其他的传递值吗?有多个值。

android kotlin material-design android-transitions
2个回答
1
投票

Array 构造函数需要一个lambda参数来定义数组每个索引的初始值。由于你已经知道你要在数组中放入什么,而且这些值不是基于它们的数组索引,所以使用 arrayOf 函数来创建你的数组。你不需要一直重复通用类型,因为它们可以被推断出来。

fun sharedElementTransition(view: View) {
    val pair: Array<Pair<View, String>> = arrayOf(
        Pair(imglogo, "logo_shared"),
        Pair(txvshared, "smartherd_shared"),
        Pair(imgProfilepic, "pic_shared")
    )
    var options : ActivityOptions = ActivityOptions.makeSceneTransitionAnimation(this, *pair)
    //...
}

1
投票

你需要告诉它如何初始化列表中的每个元素,像这样。

val list = Array<Pair<Int,Int>>(size = 3) { Pair(0,0) }

这将使一个包含3个元素的列表,这些元素都是 Pair(0,0)


你也可以像这样根据索引来初始化元素。

val list = Array<Pair<Int,Int>>(size = 3) { index ->
   Pair(index, index) 
}

这将使一个列表看起来像:

[Pair(0,0), Pair(1,1), Pair(2,2)]


对于你的情况,可以试试这样。

val pair = Array<Pair<View,String>>(size = 3) { index ->
    when(index) {
        0 -> Pair(imglogo, "logo_shared")
        1 -> Pair(txvshared, "smartherd_shared")
        2 -> Pair(imgProfilepic, "pic_shared")
    }
}
© www.soinside.com 2019 - 2024. All rights reserved.