Varargs Kotlin Java互操作无法正常工作 [英] Varargs Kotlin Java interop not working properly

查看:167
本文介绍了Varargs Kotlin Java互操作无法正常工作的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

对于makeSceneTransitionAnimation,有两个静态函数

For the makeSceneTransitionAnimation there are two static functions

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

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

第一个函数调用在Kotlin中正常工作,但是在调用第二个函数时,这两个调用都返回错误

The first function call works properly in Kotlin but when calling the second one, both these calls return errors

        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);

是否有适当的方法可以使它正常工作?或者互操作性有问题吗?

Is there a proper way to get this working or is this an issue with the interop?

修改 添加了更改以确保它使用相同的类

Edit Added change to ensure that it is using the same classes

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

推荐答案

答案是数组变量前的*符号:

The answer is the * symbol before array variable:

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

这篇关于Varargs Kotlin Java互操作无法正常工作的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆