【问题标题】:Override back button with popup message使用弹出消息覆盖后退按钮
【发布时间】:2020-02-10 21:28:19
【问题描述】:

我正在使用导航组件在我的片段之间导航。我有 1 个片段,用户可以在其中编辑一些数据。一旦发生任何变化,我就会设置标志“已保存 = false”,并且在用户按下“保存”按钮后,标志会变为“已保存 = true”。现在,我想做的是在用户按下后退按钮但没有保存更改时添加一个通常的弹出消息(你想保存更改吗?是的否取消)。我也想将它添加到两个按钮:

这个

还有这个

我调查了这个:https://developer.android.com/guide/navigation/navigation-custom-back 它仅适用于(主)后退按钮,但不适用于工具栏上的那个。当我需要转到我使用的代码中的上一个片段时:

findNavController().popBackStack()

那么我需要以某种方式覆盖此函数或添加回调吗?或者也许有一些完全不同(更好)的方式来做到这一点?

【问题讨论】:

    标签: android android-fragments kotlin navigation-drawer


    【解决方案1】:

    下次请分享您的代码

    我遇到了同样的问题,这是我的解决方案,您需要在活动/片段中覆盖 onOptionsItemSelected 并检查何时按下“返回”箭头。

    代码

    @Override
    public boolean onOptionsItemSelected(MenuItem item) {
        switch (item.getItemId()) {
        case android.R.id.home: 
            // put here what you would like to happen when u click on it
            return true;
        default:
            return super.onOptionsItemSelected(item);
        }
    }
    

    编辑:我只是注意到您使用的是 Kotlin,所以我添加了一个 kotlin 示例:

    override fun onOptionsItemSelected(item: MenuItem): Boolean {
    when (item.getItemId()){
        android.R.id.home -> {
            // put your code here
            return true
        }
    }
    return super.onOptionsItemSelected(item)
    

    }

    随便问吧:)

    【讨论】:

    • 嗨,谢谢。但只有将它放在 MainAktivity 中才有效。在 Fragment 中它什么都不做。
    • 没关系。修复。您的解决方案很糟糕,唯一的事情是确保该片段具有“setHasOptionsMenu(true)”。添加之后 - 一切都很好。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-05-30
    • 1970-01-01
    • 1970-01-01
    • 2021-12-03
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多