重新启动程序必须仅在所有者的初始化阶段过渡期间创建

Tsa*_*ary 5 animation android android-fragments android-transitions material-components-android

我正在尝试第一次在我的应用中实现转换,但此消息不断崩溃

Restarter must be created only during owner's initialization stage transition

这就是我添加片段的方式:

        activity.subFm.beginTransaction()
            .setCustomAnimations(
                R.anim.slide_in_up,
                R.anim.slide_out_down,
                R.anim.slide_in_up,
                R.anim.slide_out_down
            )
            .replace(R.id.feed_subcontents_frame_container, activity.searchFragment, "searchFragment")
            .addToBackStack("searchFragment").commit()
Run Code Online (Sandbox Code Playgroud)

我也尝试过这样:

        activity.subFm.beginTransaction()
            .setCustomAnimations(
                R.anim.slide_in_up,
                R.anim.slide_out_down,
                R.anim.slide_in_up,
                R.anim.slide_out_down
            )
            .add(R.id.feed_subcontents_frame_container, activity.searchFragment, "searchFragment")
            .addToBackStack("searchFragment").commit()
Run Code Online (Sandbox Code Playgroud)

发生的情况是该片段已成功启动并已过渡,但是存在两个问题。

  1. 当单击后退按钮时,根本不会发生过渡,并且片段只是消失而没有动画。
  2. 当我单击再次启动片段的按钮时,应用程序崩溃并显示该消息。

当我不使用交易时,一切工作正常。当单击后退按钮时,我只是弹出后退堆栈,因此可以在打开和关闭片段之间永久地来回移动。但是,一旦添加此交易,它就会中断。

我看过这篇文章,人们建议切换到appcompat:1.1.0-beta01或1.0.2,但实际上我已经使用过这两种方法。我尝试删除枯萎并运行该应用程序,但仍然崩溃。我究竟做错了什么?我只是想实现一个简单的slide_in和slide_out动画。

滑入:

<?xml version="1.0" encoding="utf-8"?>
<set xmlns:android="http://schemas.android.com/apk/res/android">
    <translate
            android:duration="@android:integer/config_mediumAnimTime"
            android:fromYDelta="100%p"
            android:toYDelta="0%p"/>
</set>
Run Code Online (Sandbox Code Playgroud)

滑出:

<?xml version="1.0" encoding="utf-8"?>
<set xmlns:android="http://schemas.android.com/apk/res/android">
    <translate
            android:duration="@android:integer/config_mediumAnimTime"
            android:fromXDelta="0"
            android:toYDelta="-100%" />
</set>
Run Code Online (Sandbox Code Playgroud)