【问题标题】:Handling backpress when activity started from notification当活动从通知开始时处理回压
【发布时间】:2017-02-15 02:27:42
【问题描述】:

我有一个通知,其中有两个按钮。因此,当用户单击此通知(不是在通知中的按钮上,而是直接在通知上)时,它会启动主屏幕。

在我的主屏幕中,我显示了一个对话框,它提供了与通知中所示相同的选项。

当用户与对话交互,然后点击主屏幕上的某个按钮时,它会启动一个新的活动。

当用户从已启动的新活动中按下后退按钮时。它返回到主屏幕。

现在我面临的问题是,当它回到主 Activity(Activity 1) 时,它再次显示该对话框,因为它使用的 Intent 与从通知启动主屏幕的 Intent 相同

我不希望该对话再次显示,因为用户已经与该对话进行了交互。我该如何处理?

这就是我的 onStart 的样子。

@Override
protected void onStart() {
    super.onStart();
    String action = getIntent.getAction();
    Log.d("MainScreen", "onStart: action " + action);
    if(action.equals(NOTIFICATION_CLICK)){
        showDialogue();
    }
}

【问题讨论】:

  • 将值保存在 sharedPreference 中
  • 框架没有其他办法了吗?
  • 如果您想将其保存在本地缓存中,则根本不使用静态变量(true,false),但这是不好的做法。你必须使用 sharedPreference
  • 您在主屏幕中的哪个方法显示了对话框(onCreate、onStart 或 onResume)?我猜你在 onResume 中显示了对话框。因为当我们单击返回按钮时,不会调用 onCreate。您是否尝试将对话框显示方法放在 onCreate 方法中?
  • @LuongDinh 我正在调用 onResume,我尝试将其移至 onStart。但是,按下返回时仍然显示对话框

标签: android android-intent notifications onbackpressed


【解决方案1】:

您在主屏幕中的哪个方法显示了对话框(onCreate、onStart 或 onResume)?

我猜你在 onResume 中显示了对话框。因为当用户转到其他活动时 onStop 被调用。否则,将调用用户单击后退按钮、onstart 和 onResume。

我的建议: 解决方案1:

    @Override
protected void onCreate(Bundle savedInstanceState) {
    if (savedInstanceState == null && isFromNotification()) {
        showDialog()
    }
}

解决方案2:

private boolean isShow;
    protected void onStart() {
    super.onStart();
    if (isShow || !isFromNotification()) return;
    Toast.makeText(this, "I love you", Toast.LENGTH_LONG).show();
    isShow = true;
}

但我更喜欢解决方案 1,它更安全,因为如果 android 没有足够的内存,可以删除隐藏的活动。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-11-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多