最近我有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)
后,我不会例外。
答案 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>