Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/188.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 从通知开始活动时处理反压_Android_Android Intent_Notifications_Onbackpressed - Fatal编程技术网

Android 从通知开始活动时处理反压

Android 从通知开始活动时处理反压,android,android-intent,notifications,onbackpressed,Android,Android Intent,Notifications,Onbackpressed,我有一个通知,里面有两个按钮。因此,当用户单击此通知(不是单击通知中的按钮,而是直接单击通知)时,它将启动主屏幕 在我的主屏幕中,我显示了一个对话框,该对话框提供了与通知中所示相同的选项 当用户与对话交互,然后稍后单击主屏幕中的某个按钮时,它将启动一个新的活动 当用户按下启动的新活动的后退按钮时。它会回到主屏幕 现在我面临的问题是,当它返回到主活动(活动1)时,它再次显示该对话,因为它使用的是从通知启动主屏幕的相同意图 我不希望该对话再次显示,因为用户已经与该对话进行了交互。我该怎么处理 这就是

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

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

当用户与对话交互,然后稍后单击主屏幕中的某个按钮时,它将启动一个新的活动

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

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

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

这就是我的onStart的外观

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

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

我猜你在简历上展示了对话。因为当用户转到其他活动时,会调用桌面上的活动。否则,按用户单击后退按钮,将调用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没有足够的内存,隐藏的活动可以被删除

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

我猜你在简历上展示了对话。因为当用户转到其他活动时,会调用桌面上的活动。否则,按用户单击后退按钮,将调用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没有足够的内存,隐藏的活动可以被删除

在SharedReferences中保存值在该框架中没有其他方法吗?如果您想将其保存在本地缓存中,请使用静态变量(true,false),但这是一种不好的做法。您必须使用SharedReference在主屏幕中显示了哪种方法的对话框(onCreate、onStart或onResume)?我猜你在简历上展示了对话。因为当我们点击后退按钮时,onCreate将不会被调用。您是否尝试将显示对话框的方法放在onCreate方法中?@LuongDinh我在调用onResume时,尝试将其移动到onStart。但是,当按back时仍显示对话在SharedReferences中保存值没有其他方法通过框架吗?如果您想将其保存在本地缓存中,则根本不需要使用静态变量(true,false),但这是一种不好的做法。您必须使用SharedReference在主屏幕中显示了哪种方法的对话框(onCreate、onStart或onResume)?我猜你在简历上展示了对话。因为当我们点击后退按钮时,onCreate将不会被调用。您是否尝试将显示对话框的方法放在onCreate方法中?@LuongDinh我在调用onResume时,尝试将其移动到onStart。但是,按下back时仍显示对话