Varargs Kotlin Java interop не работает должным образом

Для makeSceneTransitionAnimation существуют две статические функции

public static ActivityOptionsCompat makeSceneTransitionAnimation(Activity activity, View sharedElement, String sharedElementName) 

а также

  public static ActivityOptionsCompat makeSceneTransitionAnimation(Activity activity, Pair<View, String>... sharedElements) 

Первый вызов функции работает правильно в Котлине, но при вызове второго, оба этих вызова возвращают ошибки

  val imageTransition = Pair<View, String>(imageView, imageView.getTransitionName()); val textTransition = Pair<View, String>(textView, textView.getTransitionName()); val transitionList = Array(2, { imageTransition }); transitionList[1] = textTransition; val options = ActivityOptionsCompat.makeSceneTransitionAnimation(this, *transitionList); 

а также

  val imageTransition = Pair<View, String>(imageView, imageView.getTransitionName()); val textTransition = Pair<View, String>(textView, textView.getTransitionName()); val options = ActivityOptionsCompat.makeSceneTransitionAnimation(this, imageTransition, textTransition); 

Есть ли правильный способ заставить это работать или это проблема с интерпопом?

Изменить Добавлено изменение, чтобы убедиться, что он использует те же классы

 val imageView : View = view.findViewById(android.R.id.icon); val textView : View = view.findViewById(android.R.id.text1); imageView.setTransitionName("imageTransition"); textView.setTransitionName("textTransition") val imageTransition : android.support.v4.util.Pair<android.view.View, java.lang.String> = android.support.v4.util.Pair.create(imageView, imageView.getTransitionName() as java.lang.String); val textTransition : android.support.v4.util.Pair<android.view.View, java.lang.String> = android.support.v4.util.Pair.create(textView, textView.getTransitionName() as java.lang.String); val transitionList = Array(2, { imageTransition }); transitionList[1] = textTransition; val options = ActivityOptionsCompat.makeSceneTransitionAnimation(this, *transitionList); 

Ошибка текущего компилятора:

 Error:(72, 84) The spread operator (*foo) may only be applied in a vararg position Error:(72, 99) No value passed for parameter sharedElementName 

И другой

 val imageView : View = view.findViewById(android.R.id.icon); val textView : View = view.findViewById(android.R.id.text1); imageView.setTransitionName("imageTransition"); textView.setTransitionName("textTransition") val imageTransition : android.support.v4.util.Pair<android.view.View, java.lang.String> = android.support.v4.util.Pair.create(imageView, imageView.getTransitionName() as java.lang.String); val textTransition : android.support.v4.util.Pair<android.view.View, java.lang.String> = android.support.v4.util.Pair.create(textView, textView.getTransitionName() as java.lang.String); val options = ActivityOptionsCompat.makeSceneTransitionAnimation(this, imageTransition, textTransition); 

Ошибка текущего компилятора:

 Error:(72, 84) Type mismatch: inferred type is android.support.v4.util.Pair<android.view.View, java.lang.String> but android.view.View! was expected Error:(72, 101) Type mismatch: inferred type is android.support.v4.util.Pair<android.view.View, java.lang.String> but kotlin.String! was expected 

Ответ – символ * перед переменной массива:

 import android.support.v4.util.Pair as AndroidPair // ... val pair1 = AndroidPair<View, String>(fab, getString(R.string.transition_fab)) val pair2 = AndroidPair<View, String>(findViewById(R.id.app_bar), getString(R.string.transition_appbar)) ActivityOptionsCompat.makeSceneTransitionAnimation(this@MyActivity, *arrayOf(pair1, pair2)).toBundle(); 

Это может быть случай, когда вы случайно используете kotlin.Pair вместо android.util.Pair . Добавьте следующую директиву импорта в начало файла:

 import android.util.Pair 

Это сработало для меня:

 import android.support.v4.util.Pair // ... val options = ActivityOptionsCompat.makeSceneTransitionAnimation(activity, Pair<View, String>(image, image.transitionName), Pair<View, String>(title, title.transitionName)) startActivity(intent, options.toBundle())