如何确定后退按钮按下

Posted

技术标签:

【中文标题】如何确定后退按钮按下【英文标题】:How to determine back button press 【发布时间】:2019-08-28 19:44:59 【问题描述】:

我正在使用 android 导航组件库。我用导航图设置了两个片段。我想在我的片段内按下后退按钮时执行一些额外的操作。

override fun onOptionsItemSelected(item: MenuItem): Boolean 
    return NavigationUI.onNavDestinationSelected(item, view!!.findNavController())
           || super.onOptionsItemSelected(item)

我使用此代码来处理工具栏向上按钮单击,但我也想处理返回按钮按下。我该怎么做?

【问题讨论】:

查看***.com/questions/7992216/… 页面。你会在那里找到答案。 没有片段管理器有没有办法处理? 你的意思是什么额外的操作? 我想通知我的视图模型离开片段以保存数据 这就是你想要的***.com/questions/51043428/… 【参考方案1】:

这是另一个 onBackPessed 覆盖

back press

【讨论】:

它在片段中不起作用,你需要一些技巧来处理它。 添加了答案链接【参考方案2】:

例子:

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 boolean handleOnBackPressed() 
                // Handle the back button event
            
        );
        requireActivity().getOnBackPressedDispatcher().addCallback(this, callback);

        // The callback can be enabled or disabled here or in handleOnBackPressed()
    
    ...

更多解释见android官方指南:Provide custom back navigation

【讨论】:

以上是关于如何确定后退按钮按下的主要内容,如果未能解决你的问题,请参考以下文章

按下后退按钮时如何退出?

如何检测浏览器后退按钮事件 - 跨浏览器

如果用户按下后退按钮,如何调用一些代码

如何禁用在android片段类中按下的后退按钮

在颤振中,按下后退按钮时如何返回上一个 URL?

按下后退按钮时如何保留可滚动区域的滚动位置?