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

Android导航添加到后台堆栈

芮宇航
2023-03-14

我尝试使用Android导航组件,但后堆栈有问题。

我有片段A,B。要从A导航到B,我写下:

Navigation.findNavController(view).navigate(R.id.a_to_b)

但我如何才能返回到点击的返回按钮?

共有2个答案

韦思淼
2023-03-14

众所周知,导航库应该负责从后台推送和弹出。我花了几个小时寻找一条缺失的线,虽然我认为这可能对未来的谷歌用户有所帮助,从基本样本来看:

<androidx.fragment.app.FragmentContainerView
android:id="@+id/nav_host_splash_fragment"
android:name="androidx.navigation.fragment.NavHostFragment"
android:layout_width="match_parent"
android:layout_height="match_parent"
app:defaultNavHost="true"
app:navGraph="@navigation/launch_nav_graph"
tools:context=".launch.SplashActivity" />

如果不设置defaultNavHost,则基本上需要自己处理回撤。这一行对于自动将片段添加到后堆栈至关重要。

令狐翰
2023-03-14

片段A在您的backbackback中,因此您可以为按钮实现一个点击侦听器,例如,使用此解决方案。

它提供了一个示例和一些解释:

新版androidx。活动版本。1.0.0-alpha07带来了一些变化

android官方指南中的更多解释:提供自定义反向导航``java公共类MyFragment Extendes Fragment{

@Override
public void onCreate(@Nullable Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);

    // This callback will only be called when MyFragment is at least Started.
    OnBackPressedCallback callback = new OnBackPressedCallback(true /* enabled by default */) {
        @Override
        public void handleOnBackPressed() {
            // Handle the back button event
        }
    };
    requireActivity().getOnBackPressedDispatcher().addCallback(this, callback);

快乐的编码!

 类似资料:
  • 当显示主片段时,我试图清除后堆栈中的所有片段。在导航图中,我添加了这个动作 在登录片段中。我尝试了findNavController()。导航(LoginFragmentDirections.actionLoginFragmentToHomeFragment()) 和 我从这里的文件中了解到https://developer.android.com/guide/navigation/navigat

  • 我正在使用UI导航图。我有片段和。我的应用程序在片段上启动,以显示一些信息。然后,用户可以按下后退键,以结束。然后,用户通常从中选择一些内容,并以结束。 通常,我可以从堆栈中弹出并显示。但是,当应用程序刚刚启动时,后面的堆栈中没有。我想我可以手动将添加到backstack,但我想知道导航UI图是否允许我这样做。 我无法更改应用程序片段的顺序。这意味着我仍然需要首先显示。

  • 我正在使用android中的新导航架构组件,在移动到一个新的片段后,我被困在清除导航堆栈中。 示例:我在loginFragment中,当我导航到home片段时,我希望该片段从堆栈中清除,这样当用户按下back按钮时,他就不会返回到loginFragment。 我正在使用一个简单的navhostfragment.findnavcontroller(Fragment).navigate(r.id.ho

  • 问题内容: 我有活动: 在此容器内,取决于所按下的按钮是FragmentA还是FragmentB。这些片段是嵌套子片段的 容器 。即,每个片段中都包含自己的导航堆栈。 在活动的onCreate中,我将实例化这两个片段: 然后,我继续互相替换: 到目前为止,一切都很好。但 问题: 每次我用fragmentB替换fragmentA时(反之亦然) -getChildFragmentManager() 破

  • 我需要一些关于react原生应用程序的社区建议。我是一个全新的人,不理解其中的一些基本区别。 关于反应本地文档创建StackNavigator的示例建议如下:从“反应导航堆栈”导入{createStackNav导航仪}; 我发现很多人使用下面的样式导入{堆栈导航器,Tab导航器}从“反应导航”; 为什么人们使用以上两种不同的风格?哪一个更合适,为什么? react-navigation-stack

  • 我已经从连接到NavController的导航抽屉中导航到了DialogFragment。但当我导航到另一个目标时,我已经将弹出窗口设置为包含对话框片段,但它并没有清除堆栈。如何清除堆栈? AM从LogoutDialog调用此方法 我只使用片段和一个活动。 这是我导航图的一部分