我的申请中有5项活动。在每个活动上都有一个按钮,可以将其带到下一个活动。 所以活动的堆栈就像:
活性1->活性2->活性3-活性4-活性5
在第5个活动中,有一个按钮,我只想清除以前的活动。我没有在这里开始任何新的活动。
intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
无法完成此操作,因为已启动新活动。
可以为此做些什么?
答案 0 :(得分:1)
我更喜欢使用EventBus来解决问题。
架构:
需要关闭的每项活动都需要wait for a close event
。单击按钮关闭时,将发送关闭事件,并且将关闭等待关闭事件的每个活动。
如何实现:
为结束活动的事件制作课程, CloseEvent 。 CloseEvent是一个简单的类:
public static class CloseEvent{}
注册每个活动以从EventBus接收活动。
@Override
public void onStart() {
super.onStart();
EventBus.getDefault().register(this);
}
@Override
public void onDestroy() {
super.onStop();
EventBus.getDefault().unregister(this);
}
订阅每个活动以接收CloseEvent。
@Subscribe
public void onMessageEvent(CourierOrderTimeEvent event) {
this.finish() // Close the activity.
}
单击按钮时发送CloseEvent。
button.setOnClickListener(new OnClickListener() {
public void onClick(View v) {
EventBus.getDefault().post(new CloseEvent());
}
});
答案 1 :(得分:0)
而不是使用startActivity(),您可以使用startActivityForResult()
假设从activity1到activity5,你使用startActivityForResult()
进行lauching活动 Intent intent = new Intent(Activity1.this, Activity2.class);
startActivityForResult(intent, 1);
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
Log.d(TAG, requestCode + "");
finish();
}
在Activity2中你可以使用
startActivityForResult(new Intent(Activity2.this, MainActivity3.class), 2);
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
Log.d(TAG, requestCode + "");
Intent intent=new Intent();
setResult(1,intent);
finish();//finishing activity
}
直到活动4
如上所述,当您单击按钮时,在活动5中,您可以使用下面的代码。
Intent intent=new Intent();
setResult(5,intent);
请告诉我能否解决您的问题