【问题标题】:Preserve back activity while clicking notification单击通知时保留回活动
【发布时间】:2017-06-22 16:00:16
【问题描述】:

我的问题是这样的:当我按下收到的通知时,一些活动是打开的,比如说活动编号 3。但是当我按下后退按钮时,我通过 android 导航到菜单。我想要做的是保持用户正确的导航体验,当我按下后退按钮时,它会将我带到活动编号 2,当我按下后退按钮时,它会带我到活动编号 1,依此类推。
我遇到的另一个问题是,当我打开 2 号活动时,我需要在意图中设置一些额外的数据,但我不知道如何设置。
我的问题总结:保留用户的正确导航并为将通过单击后退按钮打开的活动设置一些额外内容。

这是我的通知代码:

NotificationCompat.Builder mBuilder =
                new NotificationCompat.Builder(this)
                .setSmallIcon(R.drawable.ic_launcher)
                .setContentTitle("New Question")
                .setContentText("" + CurrentQuestion.getAuthor().getUserName() + ": " + CurrentQuestion.getQuestion() + "");

        Intent openHomePageActivity = new Intent("com.example.ihelp.HOMEPAGEACTIVITY");
        TaskStackBuilder stackBuilder = TaskStackBuilder.create(this);
        stackBuilder.addNextIntent(openHomePageActivity);
        PendingIntent resultPendingIntent =
                stackBuilder.getPendingIntent(
                    0,
                    PendingIntent.FLAG_UPDATE_CURRENT
                );
        mBuilder.setContentIntent(resultPendingIntent);
        NotificationManager mNotificationManager =
            (NotificationManager) getSystemService(Context.NOTIFICATION_SERVICE);
        mNotificationManager.notify(0, mBuilder.build());

谢谢!

【问题讨论】:

  • 覆盖 onBackPressed() 方法并添加将导航到所需活动的代码
  • 但这不会有问题吗?因为当我按下后退按钮时,它将转到最后一个已停止的活动。但是,如果我按下后退按钮并覆盖 onBackPressed() 它将为我打开一个新活动,而不是恢复上一个已停止的活动。这不是我希望每次按下后退按钮时都会发生的事情..
  • 我会尝试下一个选项:通过按下通知,您将打开活动编号 1,然后立即转到编号 2,然后立即转到编号 3。然后单击“返回”按钮活动编号 3,他将返回活动编号 2。您唯一需要注意的是,在这种情况下,不会为活动编号 1 和 2 创建所有 UI 内容。我很确定,用户赢了由于速度的原因,他不觉得他只是在开场 3 之前参加了活动 1 和 2。
  • 谢谢,你不觉得这样做很糟糕吗?如果没有,我会去的!

标签: android eclipse notifications


【解决方案1】:

看起来你想合成一个回栈:http://developer.android.com/training/implementing-navigation/temporal.html#SynthesizeBackStack(参见“启动活动时创建回栈”)

还有http://developer.android.com/guide/topics/ui/notifiers/notifications.html#NotificationResponse(“启动活动时保留导航”作为“常规活动”)

【讨论】:

    【解决方案2】:

    同一场景中的任何人都可以使用我在我的应用程序中使用的这个解决方案。 覆盖 onBackPressed (在您从通知路由的活动中)并检查您的应用程序是否在堆栈中。如果没有,那么开始你的根活动。用户始终可以从您的根活动导航。这就是我在我的应用程序中所做的事情

    @Override
    public void onBackPressed() {
        if (isTaskRoot()) {
            Intent intent = new Intent(this,YourMainActivity.class);
            startActivity(intent);
            super.onBackPressed();
        }else {
            super.onBackPressed();
        }
    }
    

    【讨论】:

      【解决方案3】:

      在 onSaveInstanceState 中保存您需要的参数,然后在 onRestoreInstanceState 中取回它们。这样,您的活动是否也被任何其他通知暂停都没关系。

      【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-05-31
      相关资源
      最近更新 更多