【问题标题】:Calling finish() removes the activity from activity stack?调用完成()从活动堆栈中删除活动?
【发布时间】:2014-07-31 10:49:39
【问题描述】:

我已经申请了

  1. 在我启动activity A后启动活动'Pin'(活动A有noHistory= true,所以它不会留在堆栈上)。
  2. 如果没有设置引脚; PinActivity 也开始了一个活动NewPinActivity
  3. 设置 pin 后,NewPinActivity 调用 finish() 并返回到 PinActivity。在您将提供适当的 pin 的地方,它会调用 finish() 并再次移动到 activity A(因为 activity AnoHistory=true,所以我必须启动 activity A 的新实例)。 我的问题是,如果我从activity A 中按back,有时我的NewPinActivity 会再次出现,即使我调用了finish()

【问题讨论】:

    标签: android android-activity activity-finish


    【解决方案1】:

    不,你应该在第二个活动中使用:

            Intent exitIntent = new Intent(this,MainActivity.class);
            exitIntent.setFlags(Intent.FLAG_ACTIVITY_SINGLE_TOP|Intent.FLAG_ACTIVITY_CLEAR_TOP);
            startActivity(exitIntent);
            MainActivity.exitHandler.sendEmptyMessage(0);
    

    在 MainActivity 中:

        exitHandler = new Handler() {
        public void handleMessage(Message msg) {
            super.handleMessage(msg);
            switch (msg.what) {
            case 0:
                // clear any informations you like here
                MainActivity.this.finish();
                break;
            }
        }
    };
    

    【讨论】:

    • 这是一种有趣的表达方式。我已经解决了这个问题,但会在其他地方的代码中尝试一下。
    【解决方案2】:

    听起来您应该使用startActivityForResult 开始NewPinActivity。在成功的结果PinActivity 应该启动ActivityAIntent.FLAG_NEW_INTENTfinish(); 本身?奇怪的是,你为什么用 noHistory 开始你的ActivityA

    【讨论】:

    • activity A 做了一些至关重要的工作,只有当我的 PinActivity 返回到 activity A 并得到肯定结果(即 pin 回答正确)时,它才会从那里开始。这就是为什么我必须在完成 PinActivity 后启动新的 Activity A 实例。
    • 啊我知道你需要什么。 ActivityA 应该使用 startActivityForResult 调用 PinActivity,它应该使用相同的方法启动 NewPinActivity,除了添加了 `Intent.FLAG_ACTIVITY_FORWARD_RESULT` 标志。
    • 活动 A 有 'nohistory=true',所以一旦离开活动,它就完成了。那么'startActivityForResult'会起作用吗?因为调用它的活动 A 将完成。那么接下来将传递给哪个活动结果呢?
    猜你喜欢
    • 1970-01-01
    • 2013-08-11
    • 2018-08-29
    • 2010-12-26
    • 1970-01-01
    • 2013-09-08
    • 2012-12-16
    • 1970-01-01
    相关资源
    最近更新 更多