使用导航体系结构组件时动画错误



我正在构建一个使用BottomNavigationView和Navigation Architecture Component(https://github.com/fkshiba/POCNavigation(的应用程序。我为每个选项卡.xml都有一个图表,由于多个后退堆栈问题,选项卡之间的转换由没有导航的活动 AC 完成。我有一个关于从 Home2 到 Home3 的home_graph.xml过渡动画的动作。问题是,一旦我运行此转换并弹出回Home2,然后导航到另一个选项卡。当我从另一个选项卡转换时,它会再次为 Home2 片段运行流行动画,即使没有为其指定任何动画。

有谁知道这个问题的解决方案?

我在 GitHub 上看到了您的代码,我假设您错误地使用了 android 导航。首先,您不需要为不同的片段。只需创建一个图表并添加其中的所有片段,您必须在底部导航和其他交易中使用。其次,您不需要手动执行片段事务(在您的活动代码中(,您可以但不是必需的。您更新的代码:只有一个图表:

<navigation xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:id="@+id/home_graph"
app:startDestination="@id/home2Fragment">
<fragment
    android:id="@+id/home2Fragment"
    android:name="com.felipeshiba.pocnavigation.Home2Fragment"
    android:label="fragment_home2"
    tools:layout="@layout/fragment_home2" >
    <action
            android:id="@+id/action_home2Fragment_to_home3Fragment"
            app:destination="@id/home3Fragment"
            app:enterAnim="@anim/nav_default_enter_anim"
            app:exitAnim="@anim/nav_default_exit_anim"
            app:popEnterAnim="@anim/nav_default_pop_enter_anim"
            app:popExitAnim="@anim/nav_default_pop_exit_anim"/>
</fragment>
<fragment
    android:id="@+id/home3Fragment"
    android:name="com.felipeshiba.pocnavigation.Home3Fragment"
    android:label="fragment_home3"
    tools:layout="@layout/fragment_home3" >
    <deepLink
        android:id="@+id/deepLink"
        app:uri="ifood://home/" />
</fragment>
<fragment
    android:id="@+id/orders2Fragment"
    android:name="com.felipeshiba.pocnavigation.Orders2Fragment"
    android:label="fragment_orders2"
    tools:layout="@layout/fragment_orders2" />
<fragment
    android:id="@+id/profile2Fragment"
    android:name="com.felipeshiba.pocnavigation.Profile2Fragment"
    android:label="fragment_profile2"
    tools:layout="@layout/fragment_profile2" />
<fragment
    android:id="@+id/search2Fragment"
    android:name="com.felipeshiba.pocnavigation.Search2Fragment"
    android:label="fragment_search2"
    tools:layout="@layout/fragment_search2" /></navigation>

更新的活动代码:

class NavigationActivity : AppCompatActivity() {
override fun onCreate(savedInstanceState: Bundle?) {
    super.onCreate(savedInstanceState)
    setContentView(R.layout.activity_navigation)
    val host: NavHostFragment = supportFragmentManager
            .findFragmentById(R.id.navigation_container) as NavHostFragment? ?: return
    val navController = host.navController
    bottom_navigation.setupWithNavController(navController)
}}

现在,您可以通过将菜单项 ID 替换为片段 id 来调用菜单中的 botton 导航项(片段(,如下所示:更新的菜单.xml:

<menu xmlns:android="http://schemas.android.com/apk/res/android">
<item
    android:id="@+id/home2Fragment"
    android:icon="?android:attr/actionModeCopyDrawable"
    android:title="Home" />
<item
    android:id="@+id/search2Fragment"
    android:icon="@android:drawable/ic_menu_search"
    android:title="Search" />
<item
    android:id="@+id/orders2Fragment"
    android:icon="?android:attr/actionModePasteDrawable"
    android:title="Orders" />
<item
    android:id="@+id/profile2Fragment"
    android:icon="?android:attr/actionModeCutDrawable"
    android:title="Profile" /></menu>

您的活动.xml:

<android.support.constraint.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context=".NavigationActivity">
<fragment
    android:id="@+id/navigation_container"
    android:name="androidx.navigation.fragment.NavHostFragment"
    android:layout_width="match_parent"
    android:layout_height="0dp"
    android:visibility="gone"
    app:defaultNavHost="true"
    app:navGraph="@navigation/home_graph"
    app:layout_constraintBottom_toTopOf="@id/bottom_navigation"
    app:layout_constraintTop_toTopOf="parent" />
<android.support.design.widget.BottomNavigationView
    android:id="@+id/bottom_navigation"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    app:layout_constraintBottom_toBottomOf="parent"
    app:menu="@menu/bottom_navigation"></android.support.constraint.ConstraintLayout>

对于其他更新(工作(代码,如清单,请在此处检查

NavigationUI 在转到 BottomNavigationView 中的其他选项卡之前总是会弹出到开始目的地,这就是 nav lib 的工作方式。设置自定义 OnNavigationItemSelectedListener 并自行导航,并通过 NavOptions 传递动画。

相关内容

  • 没有找到相关文章

最新更新