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

Android导航组件中后退按钮的处理

葛修永
2023-03-14

我想知道如何使用导航控制器正确处理系统后退按钮动作。在我的应用程序中,我有两个片段(例如,fragment1和fragment2),我在fragment1中有一个操作,目标是fragment2。除了一件事之外,所有的工作都很好--当用户按下fragment2中的system back按钮时,我希望显示一个对话框(例如使用DialogFragment)来确认退出。实施这种行为的最佳方式是什么?如果我在主机片段中使用app:defaultnavhost=“true”,那么它会自动返回,忽略我的规则。另外,这个组件是用来做什么的?

我应该用“pop to”maybe吗?

共有1个答案

厉高逸
2023-03-14

新版本AndroidX.Activity Ver。1.0.0-Alpha07带来一些变化

更多解说尽在Android官方指南:提供自定义返回导航

示例:

public class MyFragment extends 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);

        // The callback can be enabled or disabled here or in handleOnBackPressed()
    }
    ...
}
requireActivity().getOnBackPressedDispatcher().addCallback(getViewLifecycleOwner(), this);

@Override
public boolean handleOnBackPressed() {
    //Do your job here
    //use next line if you just need navigate up
    //NavHostFragment.findNavController(this).navigateUp(); 
    //Log.e(getClass().getSimpleName(), "handleOnBackPressed");
    return true;
    }
public MyFragment extends Fragment implements OnBackPressedCallback {

    @Override
    public void onActivityCreated(@Nullable Bundle savedInstanceState) {
        super.onActivityCreated(savedInstanceState);
        
        getActivity().addOnBackPressedCallback(getViewLifecycleOwner(),this);
}
    
    @Override
    public boolean handleOnBackPressed() {
        //Do your job here
        //use next line if you just need navigate up
        //NavHostFragment.findNavController(this).navigateUp(); 
        //Log.e(getClass().getSimpleName(), "handleOnBackPressed");
        return true;
    }

    @Override
    public void onDestroyView() {
        super.onDestroyView();
        getActivity().removeOnBackPressedCallback(this);
    }
}
 implementation 'androidx.appcompat:appcompat:{lastVersion}'
 类似资料:
  • 我正在使用android中的导航组件,最初我在其中设置了6个片段。问题是我添加了一个新片段(ProfileFragment)。 当我从开始目标导航到此新片段时,按下本机后退按钮不会弹出当前片段。相反,它只是停留在我所在的片段上——后退按钮什么都不做。 这是我的navigation.xml: 在上图中,突出显示的箭头(左侧)是我遇到问题的导航操作。 在我的片段代码中,我导航如下: 其他导航操作正在按

  • 我已经开始使用新的导航组件,我真的很喜欢它!不过,我确实有一个问题——当我在图形的起始目的地时,我应该如何处理后退按钮? 这是我现在使用的代码: 当我在图表上的任何地方时,它都工作得很好,它会将我发回,但当我在开始时-应用程序崩溃,因为Backback是空的。 这一切对我来说都有意义,我只是不知道如何处理。 虽然我可以检查当前片段的ID是否与我知道是图的根的ID相同,但我正在寻找一个更优雅的解决方

  • 我开始创建一个应用程序,它使用一个活动(导航抽屉)和许多片段。但我无法使用工具栏上的“后退”按钮从片段中导航回来。硬件后退按钮工作正常。我知道我需要覆盖选项ItemSelected,捕捉android。R、 id.home,检查后堆栈中是否有内容,然后弹出它。在更改片段后,“burger”按钮变为“back arrow”,但当我单击它时,选项ItemSelected将打开NavigationDra

  • 在我的应用程序中,我使用动作栏和导航抽屉。操作栏中有一个按钮用于打开和关闭导航抽屉。我想把它的颜色改成红色。我该怎么做?

  • 我尝试在sencha touch中创建导航。我遇到了一个我无法理解的情况。当我按下“后退”按钮时,请帮助我找出事件侦听器不工作的原因。 我已经创建了一个主容器,其中包含一个单独的位置,用于动态添加面板。 后退和下一步按钮位于主视图的另一个面板中。 当我的添加功能启动时,它会添加面板的功能,并在一次内正常工作。但当我导航通过后退按钮的功能是不工作即piccs点击,cvcs点击;其中一个图像被改变。还

  • 问题内容: 我正在使用react native导航(react- navigation)StackNavigator。它从应用程序整个生命周期的“登录”页面开始。我不想使用返回选项,返回“登录”屏幕。有谁知道登录屏幕后如何将其隐藏在屏幕上?顺便说一句,我也使用以下命令将其隐藏在登录屏幕中: 问题答案: 1)要使后退按钮在react-navigation v2或更高版本中消失: 2)如果您要清理导航