完成以前的活动而不启动新的活动,android?

时间:2016-11-17 07:06:44

标签: android android-activity

我的申请中有5项活动。在每个活动上都有一个按钮,可以将其带到下一个活动。 所以活动的堆栈就像:

活性1->活性2->活性3-活性4-活性5

在第5个活动中,有一个按钮,我只想清除以前的活动。我没有在这里开始任何新的活动。

intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);

无法完成此操作,因为已启动新活动。

可以为此做些什么?

2 个答案:

答案 0 :(得分:1)

我更喜欢使用EventBus来解决问题。

架构:
需要关闭的每项活动都需要wait for a close event。单击按钮关闭时,将发送关闭事件,并且将关闭等待关闭事件的每个活动。

如何实现:

  1. 为结束活动的事件制作课程, CloseEvent 。 CloseEvent是一个简单的类:

    public static class CloseEvent{}
    
  2. 注册每个活动以从EventBus接收活动。

    @Override
    public void onStart() {
      super.onStart();
      EventBus.getDefault().register(this);
    }
    
    @Override
    public void onDestroy() {
      super.onStop();
      EventBus.getDefault().unregister(this);
    }
    
  3. 订阅每个活动以接收CloseEvent。

    @Subscribe 
    public void onMessageEvent(CourierOrderTimeEvent event) {
      this.finish() // Close the activity.
    }
    
  4. 单击按钮时发送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);

请告诉我能否解决您的问题