我有两个活动,A 和 B。我在 A 中有一个按钮,按下时会启动对 B 的新意图。但是,每当我在 B 中按下后退按钮时,再次单击该按钮会重新启动 Activity。我不想这样做,我希望它恢复 Activity B。实际上我正在 Activity B 中进行一些网络操作,除非用户想要刷新,否则我想保存。我该怎么做?提前致谢
4 回答
利用
@Override
public void onBackPressed(){
moveTaskToBack(true);
}
希望,它必须帮助你
这听起来像你需要重新考虑你的架构。你说:
实际上,我在 Activity B 中进行了一些联网,除非用户想要刷新,否则我想保存。
如果是这种情况,您可能不想在 ActivityB 中建立网络。也许你应该Service
从 ActivityB 开始做网络。服务和活动可以相互通信,以便活动可以让用户了解网络的最新状态。如果用户在 ActivityB 中按下 BACK,它可以完成(像往常一样)并返回到 ActivityA。在这种情况下,服务仍在管理网络。当用户再次启动 ActivityB(从 ActivityA)时,ActivityB 的新实例可以与服务通信以查看是否有任何网络正在进行,如果有,它可以获取该网络的当前状态或启动或停止它或任何。
您需要覆盖
onBackPressed
方法并从那里开始这样的活动:
@Override
public void onBackPressed() {
Intent intent = new Intent(this, activityA.class);
startActivityForResult(intent, PICK_CONTACT_REQ);
}
我想我为时已晚,但我遇到了类似的问题。
我在 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);
}