2014-01-08 32 views
4

在我的應用程序中,我有活動A,B,C,D和E.第一個活動是A然後打開B然後C和D.現在我的後退堆棧是A-B-C-D。現在,當我從D移動到E時,我想完成所有的活動,現在E應該是堆棧中的第一個活動。BackStack中的完成活動 - Android

在我的情況

intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK); 
intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP); 

android:launchMode="singleTask" 

沒有工作,因爲我沒有重開這已經是開了一個活動。我必須在開啓新活動的同時關閉後臺堆棧中的所有活動。

請幫我這麼做。

+0

見我的回答,如果您有任何疑問,那麼請問我。 –

回答

0

編輯最終的答案

ActivitA重要

import java.util.Calendar; 

import android.os.Bundle; 
import android.app.Activity; 
import android.app.AlarmManager; 
import android.app.PendingIntent; 

import android.content.Context; 
import android.content.Intent; 

import android.view.View; 
import android.widget.Button; 


public class ActivityA extends Activity { 

    @Override 
    protected void onCreate(Bundle savedInstanceState) { 

     super.onCreate(savedInstanceState); 
     if (getIntent().getBooleanExtra("EXIT", false)) { 
      startActivity(new Intent(ActivityA.this,ActivityE.class)); 
      finish(); 
     } 

     setContentView(R.layout.alayout); 

     Button play; 

     play = (Button) findViewById(R.id.aId);  

     play.setOnClickListener(new View.OnClickListener() { 

     @Override 

     public void onClick(View v) { 

      startActivity(new Intent(ActivityA.this,ActivityB.class)); 

     } 

     }); 


    } 

} 

ActivityB

import java.util.Calendar; 

import android.os.Bundle; 
import android.app.Activity; 
import android.app.AlarmManager; 
import android.app.PendingIntent; 

import android.content.Context; 
import android.content.Intent; 

import android.view.View; 
import android.widget.Button; 


public class ActivityB extends Activity { 

    @Override 
    protected void onCreate(Bundle savedInstanceState) { 

     super.onCreate(savedInstanceState); 
     if (getIntent().getBooleanExtra("EXIT", false)) { 
      finish(); 
     } 

     setContentView(R.layout.blayout); 

     Button play; 

     play = (Button) findViewById(R.id.bId);  

     play.setOnClickListener(new View.OnClickListener() { 

     @Override 

     public void onClick(View v) { 

      startActivity(new Intent(ActivityB.this,ActivityC.class)); 

     } 

     }); 


    } 

} 

ActivityC

import java.util.Calendar; 

import android.os.Bundle; 
import android.app.Activity; 
import android.app.AlarmManager; 
import android.app.PendingIntent; 

import android.content.Context; 
import android.content.Intent; 

import android.view.View; 
import android.widget.Button; 


public class ActivityC extends Activity { 

    @Override 
    protected void onCreate(Bundle savedInstanceState) { 

     super.onCreate(savedInstanceState); 
     if (getIntent().getBooleanExtra("EXIT", false)) { 
      finish(); 
     } 

     setContentView(R.layout.clayout); 

     Button play; 

     play = (Button) findViewById(R.id.cId);  

     play.setOnClickListener(new View.OnClickListener() { 

     @Override 

     public void onClick(View v) { 

      startActivity(new Intent(ActivityC.this,ActivityD.class)); 

     } 

     }); 


    } 

} 

ActivityD重要

import java.util.Calendar; 

import android.os.Bundle; 
import android.app.Activity; 
import android.app.AlarmManager; 
import android.app.PendingIntent; 

import android.content.Context; 
import android.content.Intent; 

import android.view.View; 
import android.widget.Button; 


public class ActivityD extends Activity { 

    @Override 
    protected void onCreate(Bundle savedInstanceState) { 

     super.onCreate(savedInstanceState); 
     if (getIntent().getBooleanExtra("EXIT", false)) { 
      finish(); 
     } 

     setContentView(R.layout.dlayout); 

     Button play; 

     play = (Button) findViewById(R.id.dId);  

     play.setOnClickListener(new View.OnClickListener() { 

     @Override 

     public void onClick(View v) { 

      Intent intent = new Intent(getApplicationContext(),ActivityA.class); 
      intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP); 
       intent.putExtra("EXIT", true); 
       startActivity(intent); 

       finish(); 

     } 

     }); 


    } 

} 

ActivityE

import java.util.Calendar; 

import android.os.Bundle; 
import android.app.Activity; 
import android.app.AlarmManager; 
import android.app.PendingIntent; 

import android.content.Context; 
import android.content.Intent; 

import android.view.View; 
import android.widget.Button; 


public class ActivityE extends Activity { 

    @Override 
    protected void onCreate(Bundle savedInstanceState) { 

     super.onCreate(savedInstanceState); 
     if (getIntent().getBooleanExtra("EXIT", false)) { 
      finish(); 
     } 

     setContentView(R.layout.elayout); 

     Button play; 

     play = (Button) findViewById(R.id.eId);  

     play.setOnClickListener(new View.OnClickListener() { 

     @Override 

     public void onClick(View v) { 

      //startActivity(new Intent(ActivityE.this,ActivityE.class)); 

     } 

     }); 


    } 

} 

只是這樣做

+0

讓我們有活動棧A-B-C-D。現在我必須打開E並且還需要完成A,B,C,D。請解釋我在哪裏放哪一個。 – Sniper

+0

表示你想先走A然後B然後C然後D,但在去E之前,你想完成A-B-C-D的對吧? –

+0

請回復很快,因爲我會在15分鐘內註銷 –

1

設置以下標誌:

intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK 
Intent.FLAG_ACTIVITY_CLEAR_TASK); 

FLAG_ACTIVITY_CLEAR_TASK可從API 11雖然。

+0

謝謝!對於我的應用程序android:minSdkVersion =「4」。任何其他方式來做到這一點。 – Sniper

0

使用以下完成。例如:A-> B-> C-> D從D而不是C如果你想移動到B, 然後使用finish() below.For其他離開,因爲它或你也可以使用

android:noHistory="true" in manifest.

Intent i=new Intent(C.this,D.class); 
startActivity(i); 
finish(); 

如果你點擊從d回來,C活動不會移位。它會跳到B活動,除非如果您在B中聲明finish()時未給出finish();,則跳至A活動。類似地,您可以執行此操作。或者你也可以使用android:noHistory="true"

Start Activity clearing top in Android

+0

我的應用程序是這樣的,用戶可以編輯他在前四頁A-B-C-D中給出的信息。所以我不應該在開展下一個活動時完成每項活動。一旦他在活動D中確認,我必須關閉之前的所有活動。 – Sniper

0

使用下面的代碼ActivityE ...不使用Intent.FLAG_ACTIVITY_NEW_TASK

Intent intent = new Intent(this, ActivityD.class); 
    intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP); 
    startActivity(intent); 
0

是的,你可以做到這一點。

While moving from A -> B, finish() A, and move to B. 
While moving from B -> C, finish() B, and move to C. 
While moving from C -> D, finish() C, and move to D. 
While moving from D -> E, just move to E. (dont finish activity D) 

這樣,D將成爲堆棧中的第一個活動。

0

試試這個

Intent i = new Intent(CurrentActivity.this,NextActivity.class); 
    // Closing all the Activities 
    i.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP); 
    // Add new Flag to start new Activity 
    i.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK); 
    // Staring NewActivity 
    startActivity(i); 
    finish(); 

android:noHistory="true"清單中。

0

當移動到活動e不要在你完成R活性D. 手段刪除您的標誌線Intent.FLAG_ACTIVITY_NEW_TASK

只寫

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

,並在你的清單中添加一行android:noHistory="true"