11

我有两个活动,A 和 B。我在 A 中有一个按钮,按下时会启动对 B 的新意图。但是,每当我在 B 中按下后退按钮时,再次单击该按钮会重新启动 Activity。我不想这样做,我希望它恢复 Activity B。实际上我正在 Activity B 中进行一些网络操作,除非用户想要刷新,否则我想保存。我该怎么做?提前致谢

4

4 回答 4

22

利用

@Override
    public void onBackPressed(){
        moveTaskToBack(true);
    }

希望,它必须帮助你

于 2012-12-19T10:39:47.720 回答
1

这听起来像你需要重新考虑你的架构。你说:

实际上,我在 Activity B 中进行了一些联网,除非用户想要刷新,否则我想保存。

如果是这种情况,您可能不想在 ActivityB 中建立网络。也许你应该Service从 ActivityB 开始做网络。服务和活动可以相互通信,以便活动可以让用户了解网络的最新状态。如果用户在 ActivityB 中按下 BACK,它可以完成(像往常一样)并返回到 ActivityA。在这种情况下,服务仍在管理网络。当用户再次启动 ActivityB(从 ActivityA)时,ActivityB 的新实例可以与服务通信以查看是否有任何网络正在进行,如果有,它可以获取该网络的当前状态或启动或停止它或任何。

于 2012-12-19T17:24:49.733 回答
1

您需要覆盖

onBackPressed

方法并从那里开始这样的活动:

@Override
    public void onBackPressed() {
    Intent intent = new Intent(this, activityA.class);
    startActivityForResult(intent, PICK_CONTACT_REQ);
}
于 2012-12-19T09:43:16.580 回答
0

我想我为时已晚,但我遇到了类似的问题。

我在 A 中有两个活动 A、B 和一个下一步按钮。

每当我尝试这样做时:A->按下一个按钮-> B->按后退按钮-> A->按下一个按钮-> B,当我按下后退按钮时,B屏幕被破坏。所以当我第二次回到 B 时,它是一个新创建的 B(我输入的所有信息都消失了)。

所以当我只想回到原来的 B 时,就像 A->B->A->new B!:(

所以我所做的是,在活动 B 中,我覆盖了 onBackPressed() 函数,因此它不会破坏活动。我还设置了这个标志,这样如果有一个 A 活动已经在运行,它只会将它拉到前面而不是创建一个新的 A 活动。

@Override
public void onBackPressed() {
        Intent intent = new Intent(getApplicationContext(), ActivityA.class);
        intent.addFlags(Intent.FLAG_ACTIVITY_SINGLE_TOP | Intent.FLAG_ACTIVITY_REORDER_TO_FRONT);
        startActivity(intent);
    }

然后,对于活动 A 中下一个按钮的 onclicklistener 函数,我同样设置了标志。

public void onClickNextbutton(View v){
        Intent intent = new Intent(getApplicationContext(), ActivityB.class);
        intent.addFlags(Intent.FLAG_ACTIVITY_SINGLE_TOP | Intent.FLAG_ACTIVITY_REORDER_TO_FRONT);
        startActivity(intent);
    }
于 2021-11-03T02:26:01.110 回答