【问题标题】:Shared element transition to a fragment that contains a ViewPager共享元素过渡到包含 ViewPager 的片段
【发布时间】:2021-06-08 18:52:58
【问题描述】:

我正在尝试执行从 Fragment A 中的 RecyclerView 项目到 Fragment B 的共享元素转换。转换名称设置在两个布局中最外层的 CardViews 上。我的实现与this示例中的实现基本相同。

在我在 Fragment B 中添加 ViewPager2 之前一切正常。

我尝试按照this 答案中的步骤进行操作,但没有成功。

堆栈跟踪:

java.lang.IndexOutOfBoundsException: Index: 5, Size: 5
        at java.util.ArrayList.get(ArrayList.java:437)
        at androidx.fragment.app.FragmentTransitionImpl.setNameOverridesReordered(FragmentTransitionImpl.java:182)
        at androidx.fragment.app.DefaultSpecialEffectsController.startTransitions(DefaultSpecialEffectsController.java:665)
        at androidx.fragment.app.DefaultSpecialEffectsController.executeOperations(DefaultSpecialEffectsController.java:114)
        at androidx.fragment.app.SpecialEffectsController.executePendingOperations(SpecialEffectsController.java:294)
        at androidx.fragment.app.Fragment$3.run(Fragment.java:2776)
        at android.os.Handler.handleCallback(Handler.java:938)
        at android.os.Handler.dispatchMessage(Handler.java:99)
        at android.os.Looper.loop(Looper.java:223)
        at android.app.ActivityThread.main(ActivityThread.java:7656)
        at java.lang.reflect.Method.invoke(Native Method)
        at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:592)
        at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:947)

编辑:显示我的依赖项以响应建议片段版本需要更新的答案:

ext.kotlin_version = "1.5.10"
ext.navigation_version="2.4.0-alpha02"

implementation "org.jetbrains.kotlin:kotlin-stdlib:$kotlin_version"
implementation 'androidx.core:core-ktx:1.5.0'
implementation 'androidx.appcompat:appcompat:1.3.0'
implementation 'com.google.android.material:material:1.3.0'
implementation 'androidx.constraintlayout:constraintlayout:2.0.4'

implementation 'androidx.preference:preference-ktx:1.1.1'
implementation 'androidx.lifecycle:lifecycle-livedata-ktx:2.3.1'
implementation 'androidx.lifecycle:lifecycle-viewmodel-ktx:2.3.1'
implementation 'androidx.legacy:legacy-support-v4:1.0.0'

coreLibraryDesugaring 'com.android.tools:desugar_jdk_libs:1.1.5'
implementation 'org.jetbrains.kotlinx:kotlinx-coroutines-android:1.4.3'
implementation "org.jetbrains.kotlinx:kotlinx-coroutines-core:1.4.3"
implementation "androidx.lifecycle:lifecycle-runtime-ktx:2.3.1"
implementation 'androidx.lifecycle:lifecycle-extensions:2.2.0'
implementation "androidx.work:work-runtime-ktx:2.5.0"

// Navigation
implementation "androidx.navigation:navigation-runtime-ktx:$navigation_version"
implementation "androidx.navigation:navigation-fragment-ktx:$navigation_version"
implementation "androidx.navigation:navigation-ui-ktx:$navigation_version"

【问题讨论】:

    标签: android android-fragments android-architecture-navigation android-viewpager2 shared-element-transition


    【解决方案1】:

    该错误是在androidx.fragment:fragment:1.3.4 上引入的。要修复它,您需要手动更新到 androidx.fragment:fragment:1.3.5androidx.fragment:fragment-ktx:1.3.5

    根据release notes

    修复了 aosp/1679887 在 Fragment 1.3.4 中引入的共享元素转换中的回归问题。片段现在可以正确处理过渡组(通过 transitionGroup="true" 直接设置或通过 transitionName 或背景间接设置)并且共享元素将不再抛出 IndexOutOfBoundsExceptions。 (I16484, b/188679569, b/188969304)

    【讨论】:

    • 谢谢,但是我对 Fragment 没有任何依赖。请查看我编辑的问题以查看我的依赖项。我尝试显式添加“androidx.fragment:fragment:1.3.5”,但没有帮助
    • @Shko 尝试添加 androidx.fragment:fragment-ktx:1.3.5
    • 谢谢,我确实错过了ktx 扩展。奇怪的是,1.3.5 并没有解决这个问题。但是androidx.fragment:fragment-ktx:1.4.0-alpha03 做到了,所以现在一切正常
    【解决方案2】:

    添加对androidx.fragment:fragment-ktx:1.4.0-alpha03 的依赖解决了这个问题。不再需要添加空视图。

    release notes 声明如下:

    从 Fragment 1.3.5 开始:修复了由 aosp/1679887 在 Fragment 1.3.4 中引入的共享元素转换中的回归。片段现在可以正确处理过渡组(通过transitionGroup="true" 直接设置或通过transitionName 或背景间接设置)并且共享元素将不再抛出IndexOutOfBoundsExceptions。 (I16484, b/188679569, b/188969304)

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-11-30
      • 1970-01-01
      • 2018-09-11
      • 1970-01-01
      • 2016-04-23
      相关资源
      最近更新 更多