2013-04-09 9 views
7

私のアプリのルートアクティビティとして動作するアクティビティAがあるとします。そして、私は活動Bに行くこの活動を形成、私は活動Aの新しいインスタンスを作成せずにBからAへ戻ることができるようにしたいAndroid新しいインスタンスを作成せずにアクティビティを開始する

このコードは、アクティビティBである

public void onBackPressed() { 
     super.onBackPressed(); 
//  Intent intent= new Intent(getBaseContext(), MainActivity.class); 
//  intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_SINGLE_TOP); 
     Intent myIntent = new Intent(getBaseContext(), MainActivity.class); 
     myIntent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP); 
     startActivity(myIntent); 
     Log.d("Back", "TEST"); 
    } 

しかし、それはアクティビティAのonCreateを呼び出します。私は何をしたいアクティビティBが開始されたときに、それが戻って活動がこの

public void onBackPressed() { 
    super.onBackPressed(); 
    Log.d("Back", "TEST"); 
} 

を試してみてくださいマニフェスト

<activity 
      android:name=".MainActivity" 
      android:label="@string/title_activity_main" 
      android:screenOrientation="unspecified" 
      android:launchMode="singleTask" 
      android:stateNotNeeded="false"> 
      <intent-filter> 
       <action android:name="android.intent.action.MAIN" /> 
       <category android:name="android.intent.category.HOME"/> 
       <category android:name="android.intent.category.DEFAULT" /> 
       <category android:name="android.intent.category.LAUNCHER" /> 
      </intent-filter> 
     </activity> 

     <activity 
      android:label="@string/app_name" 
      android:name=".SubmenuActivty" > 
     </activity> 
+0

おかげで誰のために...新しいインスタンスなしフロントに古い活動を行います。あなたは読んだことがありますか? –

答えて

0

ある

への切り替えを終了するたびにバックグラウンドで持っていますそしてそれはすべてあなたが必要とするものです。

2

何もする必要はありません。あなたは活動に活動Bから移動したときにだけ、デフォルトで活動B.

からあなたonBackPressed()方法を削除し、Androidは活動backstackへを追加します。 アクティビティBから戻るボタンを押すか完了すると、自動的にアクティビティAがバックスタックから復元されます。

アクティビティBを終了させたい場合は、プログラムでアクティビティのfinish()メソッドを呼び出します。

+0

バックスラックから新しいインスタンスを作成することによって、アクティビティaを復元します。私はいつもアクティビティAを生きたいと思っています –

+0

アクティビティBを始めている間にアクティビティAを終了しますか?不確実な場合、アクティビティAはバックステックから最後の状態に復元されます –

+0

私はIntent myIntent = new Intent(getBaseContext()、SubmenuActivty.class); startActivity(myIntent);アクティビティAを開始する –

0

moveTaskToBack(true)を使用します。

public void onBackPressed() { 
// TODO Auto-generated method stub 
moveTaskToBack(true); 
super.onBackPressed(); 
} 

またはあなたはまた、Androidのアクティビティのライフサイクルによると、仕上げ()

+0

これはアクティビティを生かし続けるわけではありません。アクティビティの新しいインスタンスを作成します。それは再びoncreateメソッドを呼び出します –

11

を使用することができますが、活動Aを起動するとき:

ライフサイクルメソッドリスト:

Activity A.onResume(); 
Activity A.onStart(); 
Activity A.onCreate(); 

活動ステータス:

Activity A : Resumed 

あなたが活動になりましたB起動:

ライフサイクルメソッドリスト:

Activity A.onStop(); 
Activity B.onResume(); 
Activity B.onStart(); 
Activity B.onCreate(); 
Activity A.onPause(); 
    ... 
    ... 
    ... 

活動状況:

Activity A : Stopped 
    Activity B : Resumed 

そして、あなたは再び起動し今すぐ:

ライフサイクルメソッドリスト:

Activity B.onDestroy(); 
Activity B.onStop(); 
Activity A.onResume(); 
    .... 
    .... 
    ....  

活動状況は:

Activity B : Destroyed 
    Activity A : Resumed 

これは、アクティビティのライフサイクルである: enter image description here

あなたが詳細を見つけることができますhere

デフォルトの動作によれば、アクティビティAはonStop()状態になり、アクティビティAに戻るときに新しいインスタンスを作成する必要がありません。私が知っている限り、Aインスタンスを生かし続ける方法はありません。

+3

AがBを開始すると、Aはただ停止します(ただし**まだ生きています**)。Bが終了すると自動的に再起動し、Aを再開します。Aはそれ自身で 'finish()'を呼び出すまで生き残ります。 –

3
intent.setFlags(Intent.FLAG_ACTIVITY_REORDER_TO_FRONT); 

それを試してみてください...それは、これをダウン定格

関連する問題