【问题标题】:"androidx.transition.TransitionSet cannot be cast to android.transition.Transition" after updating androidx lifecycle from 2.2.0-alpha03 to alpha04将 androidx 生命周期从 2.2.0-alpha03 更新为 alpha04 后,“androidx.transition.TransitionSet 无法转换为 android.transition.Transition”
【发布时间】:2019-10-03 10:20:45
【问题描述】:

还有一些其他类似的问题,但都参考 Android 支持库。我正在使用新的 androidx 库。

将 androidx 生命周期依赖项从 2.2.0-alpha03 更新到 2.2.0-alpha04 后,我遇到以下崩溃(在 Android 9 上):

E/AndroidRuntime: FATAL EXCEPTION: main
    Process: com.myapp, PID: 12345
    java.lang.ClassCastException: androidx.transition.TransitionSet cannot be cast to android.transition.Transition
        at androidx.fragment.app.FragmentTransition.setListenerForTransitionEnd(FragmentTransition.java:307)
        at androidx.fragment.app.FragmentTransition.configureTransitionsOrdered(FragmentTransition.java:419)
        at androidx.fragment.app.FragmentTransition.startTransitions(FragmentTransition.java:139)
        at androidx.fragment.app.FragmentManager.executeOpsTogether(FragmentManager.java:2383)
        at androidx.fragment.app.FragmentManager.removeRedundantOperationsAndExecute(FragmentManager.java:2341)
        at androidx.fragment.app.FragmentManager.execPendingActions(FragmentManager.java:2244)
        at androidx.fragment.app.FragmentManager$3.run(FragmentManager.java:422)
        at android.os.Handler.handleCallback(Handler.java:873)
        at android.os.Handler.dispatchMessage(Handler.java:99)
        at android.os.Looper.loop(Looper.java:214)
        at android.app.ActivityThread.main(ActivityThread.java:7037)
        at java.lang.reflect.Method.invoke(Native Method)
        at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:494)
        at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:965)

与 2.2.0-alpha05 版本相同的问题。

更新:实际上,似乎 androidx 片段 1.2.0-alpha03 被拉入,这导致了问题。使用片段 1.2.0-alpha02 时,不会发生崩溃。有问题的演员表在这里添加:

https://android.googlesource.com/platform/frameworks/support/+/1b07d07c5a5ca70bdddeab356e7f5175f60094d4%5E%21/#F4

调用后发生此崩溃:

supportFragmentManager
    .beginTransaction()
    .remove(f)
    .commit()

我发现的唯一解决方法是删除退出转换:

f.exitTransition = Slide(gravity)

注意,片段 f 的类型为:androidx.fragment.app.Fragment

有什么想法吗?

【问题讨论】:

  • 看起来像一个错误。据我所知,您现在可以将 import androidx.transition.Fade 更改为 import android.transition.Fade 以解决此问题。
  • @MDikkii 我注意到在 alpha03(及更早版本)中,退出转换无论如何都在工作(没有效果)(但没有崩溃),所以我想知道那个 exitTransition 是否有问题
  • 是的。在来自fragment-1.2.0-alpha03 源的FragmentTransition 中有一些新的东西(我已经检查了fragment-1.2.0-alpha02,但我看不到类似的东西)// 似乎是android.transition.Transition 所以androidx 版本不能被投射@987654332 @
  • 我可以确认,fragment-1.2.0-alpha02 不会发生崩溃,但 fragment-1.2.0-alpha03 确实会发生崩溃(我刚刚编辑了问题)

标签: android android-fragments android-lifecycle android-transitions


【解决方案1】:

此问题已在即将发布的 Fragment 1.2.0-beta01 版本中修复。

在此处查看错误:https://issuetracker.google.com/issues/142056487

【讨论】:

  • 我刚刚更新到 beta01 并且可以确认这已经解决了问题。谢谢!
【解决方案2】:

我在运行 gradle 时遇到了同样的问题 实现“androidx.fragment:fragment-ktx:1.2.5” 以上解决方案都不适合我 但是,当我升级到 1.3.0-rc01 时问题消失了

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-10-15
    • 1970-01-01
    • 2015-02-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多