簡體   English   中英

Android完成Activity並啟動另一個

[英]Android finish Activity and start another one

我很好奇一件事。 我怎樣才能完成當前的活動並開始另一個活動。

示例:

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

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

采用

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

從你的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();
        }
    }

這可能不是全部編譯,但希望你能得到這個想法。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM