Android完成Activity并启动另一个

时间:2011-09-29 15:47:42

标签: android android-activity stack

我对一件事感到好奇。我怎样才能完成当前的活动并开始另一项活动。

示例:

MainActivity
    --(starts)--> LoginActivity
        --(if success, starts)--> SyncActivity
            --(if success start)--> MainActivity (with updated data).

所以我希望SyncActivity在成功同步后启动MainActivity,如果我按回按钮不返回SyncActivity或在SynActivity之前打开的任何其他活动。

我尝试过这段代码:

Intent intent = new Intent(Synchronization.this, MainActivity.class);
intent.addFlags(Intent.FLAG_ACTIVITY_NO_HISTORY);
startActivity(intent);
this.finish();

但它无法正常工作。任何想法如何使事情正常工作?

2 个答案:

答案 0 :(得分:50)

使用

Intent intent = new Intent(SyncActivity.this, MainActivity.class);
intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
startActivity(intent);

答案 1 :(得分:3)

从你的OP来看,我不确定你是否绝对必须初始化你的mainActivity两次..

Android的设计使得用户永远不会真正关闭应用。 专注于覆盖Android生命周期方法,如OnResume和OnPause,以保存UI数据等。

因此,您不需要明确finish()主要活动(实际上不应该)。要从先前的活动接收登录或同步数据,只需覆盖OnActivityResult()方法即可。但是,要执行此操作,您必须使用startActivityForResult(intent)启动活动。因此,对于每个活动,您应该这样做:

主要活动:

static public int LOGIN_RETURN_CODE = 1;

开始登录:

Intent intent = new Intent(MainActivity.this, LogInActivity.class);
startActivityForResult(intent, LOGIN_RETURN_CODE);

收到登录信息:

@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
    switch (requestCode) {
      case LOGIN_RETURN_CODE:
        //do something with bundle attached
    }
}

登录活动:

static public int SYNC_RETURN_CODE = 2;

开始同步:

Intent intent = new Intent(LogInActivity.this, SyncActivity.class);
startActivityForResult(intent,SYNC_RETURN_CODE);

收到信息并返回Main:

@Override
    protected void onActivityResult(int requestCode, int resultCode, Intent data) {
        switch (requestCode) {
          case MainActivity.SYNC_RETURN_CODE:
            Intent intent = new Intent(...);
            intent.setResult(RESULT_OK);
            finish();
        }
    }

这可能不会全部编译,但希望你能得到这个想法。