当前位置: 首页 > 知识库问答 >
问题:

Android NavigationUI-弹出起始片段时处理反压

柯昱
2023-03-14

我在android应用程序中使用android架构组件的NavigationUI和底部导航。我有以下情况

  1. 应用程序从片段A开始
  2. 初始计算已经完成,现在我通过navController弹出片段A。popBackStack()
  3. 应用程序转到片段B(这是应用程序的“主页”)
  4. 现在有更多的片段,比如C和D
  5. 用户可以在B、C和D之间导航

现在问题是在我的导航图中,我的起始片段是一个(通过定义app:startDestination=“@id/fragmentA”),但现在它从活动中弹出。因此,任何时候如果我按下backpress,应用程序都会关闭,而不是返回到上一个片段。例如,假设我从片段B导航到片段C或D,如果我按下后退按钮,我的应用程序将关闭,而不是转到片段B。如果有办法“重新分配”开始目标?

我检查了这个问题的答案,该问题的情况与上述类似,但使用导航选项(NavOptions)不知何故不起作用。还有别的办法吗?下面是我用来弹出片段和添加导航选项的代码

 navController.popBackStack()     
 val navOptions: NavOptions = NavOptions.Builder()
            .setPopUpTo(R.id.homeFragment, true)
            .build()

 navController.navigate(R.id.action_fragmentA_to_fragmentB, null, navOptions)

共有1个答案

巴博耘
2023-03-14

使用此导航图。希望它能解决你的问题。

<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/nav_graph"
    app:startDestination="@id/fragment_a">

    <fragment
        android:id="@+id/fragment_a"
        tools:layout="@layout/fragment_a">

        <action
            android:id="@+id/action_a_to_b"
            app:destination="@id/fragment_b"
            app:popUpTo="@id/fragment_a"
            app:popUpToInclusive="true"/>
    </fragment>

    <fragment
        android:id="@+id/fragment_b"
        tools:layout="@layout/fragment_b">

        <action
            android:id="@+id/action_b_to_c"
            app:destination="@id/fragment_c"/>
    </fragment>

    <fragment
        android:id="@+id/fragment_c"
        tools:layout="@layout/fragment_c">
    </fragment>

</navigation>

使用以下行进行导航:

navController.navigate(R.id.action_a_to_b)
navController.navigate(R.id.action_b_to_c)
 类似资料:
  • 我正在使用嵌套片段,当我按下时,我面临问题。 流量: 这是我的应用程序的结构。其中C、D、E、F是子片段,未添加到后堆栈中。D包含列表片段,从D中我称为B。但当我从B中按回来时,我想再次使用最后选定位置的D。我在后堆栈中添加了A和B。我怎样才能做到这一点。给我提供一些解决方案。我回忆起D,但选择的位置总是在变化。

  • 我有一个包含框架布局的活动,片段A托管在这里与一起。 此片段A托管了另外两个包含回收器视图的片段——使用< code > fragmentstatepageradar 的片段A1和片段A2。此时,我能够在片段A1和A2中使用< code > getSupportFragmentManager()获得父片段。 单击A1和A2中的回收器视图项会产生另一个片段,比如片段B,它会替换片段A并将其添加到ba

  • 我有一个标签活动。它包含一个包含片段项的listView。我有一个按钮在这些列表项(这是片段),我想当我单击它显示一个弹出窗口。不幸的是,我能看到弹出窗口,我想这是因为列表项的显示太小了。我实际上想在包含列表的活动中看到它。 有什么想法吗? RowinHomeMab是listView中的一个项,它放置在TabActivity中。

  • 如何从堆栈中弹出特定片段,并从片段中删除其他片段?例如,这些是我的片段,我现在在E right know。 A- 想从E回到B,清除C和D。我怎么能做到这一点?

  • 问题内容: 下面是我的AutoIt脚本(UI3_Authentication.au3),用于处理Windows身份验证弹出窗口。 以下是我对上述AutoIt exe文件的Selenium代码调用。 当我运行上述Selenium文件时,它将打开页面并弹出身份验证。但这不是在插入用户名和密码。它等待用户输入。 问题答案: 我解决了 其实这是我的坏事。以前,我的代码是这样的: 我在get()之前添加了a

  • 问题内容: 我遇到的一种情况是,单击链接网页会打开一个弹出窗口。并且在弹出窗口打开之后,焦点位于弹出窗口中,并且主窗口被禁用。而且我无法将控件转移到弹出窗口。请看下面的代码。 我无法将控件从父窗口转移到弹出窗口。我知道以下命令。 但是它没有太大帮助。请帮我。 问题答案: 当我需要使用以下弹出窗口,关闭它并返回主窗口时,这是我使用的代码。当然,出于此答案的目的已对其进行了简化。它维护原始窗口(主窗口