小编shk*_*hko的帖子

共享元素转换为包含 ViewPager 的片段

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

一切正常,直到我在片段 B 中添加了一个 ViewPager2。

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

堆栈跟踪:

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)
Run Code Online (Sandbox Code Playgroud)

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

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 …
Run Code Online (Sandbox Code Playgroud)

android android-fragments shared-element-transition android-architecture-navigation android-viewpager2

4
推荐指数
1
解决办法
296
查看次数

升级到导航版本 2.4.0-alpha02 后“getActionId 不覆盖任何内容”

我从版本 2.3 升级到 2.4.0-alpha02 后遇到了这个问题。新版本应该包含修复程序,但它对我不起作用。作为参考,我的操作定义如下:

<action
        android:id="@+id/action_from_to_destination"
        app:destination="@id/destination" />
Run Code Online (Sandbox Code Playgroud)

android android-navigation android-architecture-navigation

3
推荐指数
1
解决办法
1352
查看次数

Fragments + ViewBinding 的最佳实践

在 Google Codelab(不记得是哪一个)中,他们建议对片段执行以下操作:

class MyFragment : Fragment() {

    private var _binding: MyFragmentBinding? = null
    private val binding get() = _binding!!

    override fun onCreateView(
        inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle?
    ): View {
        _binding = MyFragmentBinding.inflate(inflater, container, false)
        
        return binding.root
    }

    override fun onDestroyView() {
        super.onDestroyView()
        _binding = null
    }

}
Run Code Online (Sandbox Code Playgroud)

然后使用例如访问视图binding.button1

这样做有没有具体的原因,使用_bindingbinding?有更好的方法吗?也许是 Fragment 的扩展(例如 BaseFragment),以避免代码重复。

android android-fragments kotlin

1
推荐指数
1
解决办法
1165
查看次数