2016-05-21 9 views
1

私はA-> B-> C-> Dのような一連のアクティビティを持っています。すべてのアクティビティでバック機能が有効になっています。今、アクティビティDの特定のアクションについて、アクティビティBに移動したいと思います。つまり、D & Cが終了し、アクティビティBが再開されます。どのようにそのような移行を達成するために?あなたは両方のCとDの活動と再開を閉じることができるようにするためD活動アンドロイドの現在のアクティビティから以前のアクティビティを削除する

C close = new C(); 
close.finish(); 
D.this.finish(); 

とマニフェストファイルのアクティビティタグ内のいくつかのアクション内でこのコードを追加

答えて

0

あなたは正しいと理想的な流れをフォローしたい場合は、 "onActivityResult" 方法のために行きます。 、BがCになると、あなたの例のためのものと、その時点でそれはstartActivityForResultを使用して、アクティビティCが開始され、CがDになると、再びCは、あなたのケースのためにD.

を行う行くことstatActivityForResultを使用します

public class B extends Activity 
{ 
    public static int RESULT_CODE=111; 

    public void onCreate(Bundle SavedInstance) 
    { 
    ... 
    .... 
    Intent intent = new Intent(B.this,C.class); 
    startActivityForResult(intent,REQUEST_CODE); 
    } 


    public void onActivityResult(int requestCode,int resultCode,Intent data) 
    super.onActivityResult(requestCode, resultCode, data); 
    if(requestcode == C.RESULT_OK) 
     { 

     //do you work when D is finished and comes back to B 
     } 

    } 


public class C extends Activity 
{ 
    public static int RESULT_CODE=222; 

    public void onCreate(Bundle SavedInstance) 
    { 
    ... 
    .... 
    Intent intent = new Intent(C.this,D.class); 
    startActivityForResult(intent,REQUEST_CODE); 
    } 


    public void onActivityResult(int requestCode,int resultCode,Intent data) 
    super.onActivityResult(requestCode, resultCode, data); 
    if(requestcode == D.RESULT_OK) 
    { 
    setResult(RESULT_OK); 
    } 

    } 


    public class D extends Activity 
    { 
     public static int RESULT_CODE=333; 

     public void onCreate(Bundle SavedInstance) 
     { 
     ... 
     .... 

     } 


     //your back click function 

     public void onBackClick(View v) 
     { 
     setResult(RESULT_OK); 
    } 
+0

ありがとう@Mrugesh。この特定の解決策は、上記の問題を最も適切な方法で解決しました。これは、次のアクティビティからのアクションに応答して、以前のアクティビティに対してアクションを実行するための最も好ましい方法であるはずです。 – lancer025

0

てみてください、この属性

android:launchmode="singleTop" //Or singleTask 

を追加します

+0

ありがとう。それは活動Cの新しいインスタンスを作成し、それを殺すことはありません..? – lancer025

0

明確にするため、このAPIを使用してください。< 11:

Intent intent= new Intent(this, Login2.class); 
    intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_CLEAR_TASK |Intent.FLAG_ACTIVITY_NO_HISTORY); 
    startActivity(Intent); 
APIレベルで

11新しいインテントフラグはちょうどこのために添加した:活動DからIntent.FLAG_ACTIVITY_CLEAR_TASK

Intent intent= new Intent(this, Login2.class); 
    intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TASK | Intent.FLAG_ACTIVITY_NO_HISTORY); 
    startActivity(Intent); 
1

は、インテントに適切なフラグでアクティビティBを呼び出します。 Intent.FLAG_ACTIVITY_CLEAR_TOPはそれを行う必要があります。

例コード:

Intent intent = new Intent(this, B.class) 
intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP | Intent.FLAG_ACTIVITY_NEW_TASK); 
intent.addFlags(Intent.FLAG_ACTIVITY_NO_HISTORY); 
startActivity(intent); 
finish(); 
+0

'Intent Intent =新しいインテント(this、B.class); Intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP | Intent.FLAG_ACTIVITY_NEW_TASK); Intent.addFlags(Intent.FLAG_ACTIVITY_NO_HISTORY); startActivity(インテント); ' finish(); 私はこれを行いましたが、最初のアクティビティAが点滅し、アクティビティBが表示されます。アクティビティがロードされるまでスタックを覗くことができるのと同じように – lancer025

+0

finish()コールなしで試してみてください。 – jaibatrik

関連する問題