Android java.lang.IllegalArgumentException:无效的转换类型

时间:2018-04-13 08:26:36

标签: android exception android-4.4-kitkat transitions

最近我有java.lang.IllegalArgumentException: Invalid Transition types。 这个异常发生在android api 19上,它出现在我将android构建工具和支持库更新到版本27之后。

有没有人知道KitKat过渡发生了哪些变化?

    Fragment fragment = new  Fragment();
    if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT) {
        Transition transition = new AutoTransition();
        fragment.setSharedElementEnterTransition(transition);
    }

    String backStateName = fragment.getClass().getName();
    FragmentManager manager = getFragmentManager();
    FragmentTransaction ft = manager.beginTransaction();
    ft.addSharedElement(view, "TransitionView");
    ft.replace(R.id.mainActivity_container, fragment, backStateName);
    ft.addToBackStack(backStateName);
    ft.commit();

完全例外:

Fatal Exception: java.lang.IllegalArgumentException: Invalid Transition types
   at android.support.v4.app.FragmentTransition.chooseImpl(FragmentTransition.java:461)
   at android.support.v4.app.FragmentTransition.configureTransitionsOrdered(FragmentTransition.java:3317)
   at android.support.v4.app.FragmentManagerImpl.executeOpsTogether(FragmentManager.java:2380)
   at android.support.v4.app.FragmentManagerImpl.removeRedundantOperationsAndExecute(FragmentManager.java:2338)
   at android.support.v4.app.FragmentManagerImpl.execPendingActions(FragmentManager.java:2245)
   at android.support.v4.app.FragmentManagerImpl$1.run(FragmentManager.java:703)
   at android.os.Handler.handleCallback(Handler.java:733)
   at android.os.Handler.dispatchMessage(Handler.java:95)
   at android.os.Looper.loop(Looper.java:136)
   at android.app.ActivityThread.main(ActivityThread.java:5590)
   at java.lang.reflect.Method.invokeNative(Method.java)
   at java.lang.reflect.Method.invoke(Method.java:515)
   at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1268)
   at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1084)
   at dalvik.system.NativeStart.main(NativeStart.java)

更新

if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT)更改为if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP)后,我不会例外。

5 个答案:

答案 0 :(得分:4)

查看更改here,它看起来应该是“必须”使用支持转换而不是“可以”使用它们。尝试将AutoTransition从android.transition.AutoTransition更改为android.support.transition.AutoTransition,它应该可以正常工作而无需任何SDK版本检查。

答案 1 :(得分:2)

检查您的片段导入,如下所示..

import android.support.v4.app.Fragment;

如果您使用addSharedElement在应用程序级别gradle文件api级别21中进行更改。

     minSdkVersion 21

答案 2 :(得分:1)

您正在混合来自支持库和平台的过渡。 例如。

import android.support.transition.AutoTransition;
import android.transition.Fade;

更改为仅使用支持库,如下所示:

import android.support.transition.AutoTransition;
import android.support.transition.Fade;

答案 3 :(得分:0)

切换到androidX后,出现此错误,因为某些导入来自

  

android.package

还有一些

  

androidx.package

答案 4 :(得分:0)

就我而言,我使用的是 MaterialContainerTransform ,而我替换了

auto values = m | rv::values | rv::common;

作者

variant<iterator, sentinel>