web-dev-qa-db-ja.com

Androidアクティビティを終了して、別のアクティビティを開始します

一つ気になります。現在のアクティビティを終了して、別のアクティビティを開始するにはどうすればよいですか。

例:

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

しかし、それは適切に機能していません。物事を適切に機能させる方法はありますか?

25
Android-Droid

使用する

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

OPから判断すると、mainActivityを2度初期化する必要があるかどうかはわかりません。

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

これですべてがコンパイルされるわけではないかもしれませんが、うまくいけば、あなたはアイデアを得るでしょう。

3
Ian