2011-09-29 48 views
20

我很好奇一件事。我怎样才能完成我目前的活动并开始另一项活动。Android完成活动并开始另一个

例子:

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

所以我想,当SyncActivity开始MainActivity succesfull同步之后,如果我按后退按钮不回SyncActivity或任何其他活动SynActivity之前打开。

我已经试过与此代码:

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

,但它不能正常工作。任何想法如何让事情正常工作?

+0

“同时”意味着什么? – Blackbelt

+0

我只是修复了这个问题 –

回答

45

使用

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

呵呵强大的旗帜,如此未被发现......( - – Audrius

+2

注意,当你没有明确调用finish();''onDestroy()'生命周期方法将不会在' startActivity(意向);'。 – heyarne

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); 

才能收到信息并返回主:

@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(); 
     } 
    } 

这可能不是所有的编译,但希望你的想法。

相关问题