导航架构不使用单个活动

时间:2019-01-16 01:51:30

标签: android android-fragments android-navigation

我已经实现了Navigation Architecture框架来显示几个片段。不幸的是,每个片段都在创建一个新的活动。 所以我以Activity开始了intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP)intent.addFlags(Intent.FLAG_ACTIVITY_SINGLE_TOP)标志,但它们并没有太大帮助,因为使用它们只会在第一次显示后不显示任何片段。

nav_graph.xml

<?xml version="1.0" encoding="utf-8"?>
    <navigation xmlns:android="http://schemas.android.com/apk/res/android"
        xmlns:app="http://schemas.android.com/apk/res-auto"
        android:id="@+id/notification_nav_graph"
        app:startDestination="@id/openingNotificationFragment">
        <fragment
            android:id="@+id/standByScreenFragment"
            android:name="com.emaz.android.ui.notification.standby.StandByScreenFragment"
            android:label="StandByScreenFragment" />
        <fragment
            android:id="@+id/welcomeNotificationFragment"
            android:name="com.emaz.android.ui.notification.welcome.WelcomeNotificationFragment"
            android:label="WelcomeNotificationFragment" />
        <fragment
            android:id="@+id/openingNotificationFragment"
            android:name="com.emaz.android.ui.notification.ingress..OpeningNotificationFragment"
            android:label="OpeningFragment" />
        <fragment
            android:id="@+id/closingNotificationFragment"
            android:name="com.emaz.android.ui.notification.ingress..ClosingNotificationFragment"
            android:label="ClosingNotificationFragment" />
    </navigation>

家庭活动

调用NotificationActivity
val intent = Intent(this, NotificationActivity::class.java)
                intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP)
                intent.addFlags(Intent.FLAG_ACTIVITY_SINGLE_TOP)
                startActivity(intent)

NotificationActivity 并将片段称为

notification_container.visibility = View.GONE
            fragment_layout.visibility = View.VISIBLE
            val navController = Navigation.findNavController(this, nav_host_fragment.id)

            navController.popBackStack()
            Log.e("nav", "${navController.currentDestination} and $resId < ResourceId")

            navController.navigate(resId, null)

我可以看到resId发生了变化,但在屏幕上看不到。 请帮忙。

1 个答案:

答案 0 :(得分:0)

我解决了多个活动创建问题。对于面临同样问题的其他人。如果您尝试使用导航架构导航到片段,请确保该应用程序不在后台。

使应用程序保持活动状态不会创建该活动的新实例,并且该应用程序将按预期运行。