2012-09-13 206 views
12

中開始新活動我的問題與這些類型的問題稍有不同。我需要刪除或清除我的活動堆棧,然後開始一個新的活動。我不認爲這是一個明確的標誌問題。我用一個例子解釋:清除活動堆棧並在android

我的活動流程:

Login > Home > Screen1 > screen2 .... 

我完成登錄活動或與no_history標誌調用。所以我的活動看起來像這樣

Login(finished)> Home [bottom of the stack now] > Screen1 > Screen2[top of the stack] 

我需要處理會話錯誤。如果有任何會話錯誤發生,我需要返回登錄活動。但請記住,我沒有在堆棧中登錄活動。所以clear_top將不起作用。

如果Screen2發生任何會話錯誤,那麼我需要清除整個堆棧(screen2,screen1,home),然後開始登錄活動。所以在後退按鈕登錄活動後將關閉我的應用程序。

有什麼方法可以清除活動堆棧嗎?

在此先感謝

+0

現在的問題是,是否要返回到登錄活動,即使它不在堆棧中,然後您是否要完成該活動。第二個問題是在什麼情況下,你想清除堆棧並返回。第一個是你想用_澄清的事情,所以在後退按鈕登錄活動後將關閉我的應用程序_。 –

+0

第一:我有一個保存會話的選項。如果我登錄成功,那麼它會打開HOME活動。根據流程,當我們按下HOME按鈕時,它應該關閉應用程序。只有註銷或會話錯誤才能顯示登錄頁面。第二:想想一個網站。會話過期時會發生什麼?它將您重定向到登錄頁面。我想要完全一樣。我必須關閉所有需要會話過期登錄權限的活動。 – shantanu

回答

19

使用此

Intent i = new Intent(yourScreen.this,Home.class); 
     i.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP); 
     i.putExtra("EXIT", true); 
     startActivity(i); 

,並在家庭類的OnCreate,做這個檢查,

if (getIntent().getBooleanExtra("EXIT", false)) 
    { 
     Intent i = new Intent(Home.this,Login.class); 
     startActivity(i); 
     finish(); 
    } 

這是什麼將基本上做的是無不管你是什麼樣的活動,你都可以用清晰的頂部標誌來調用主屏幕。在主屏幕中,onCreate方法中有一個檢查條件,它有助於清除堆棧並將您帶到登錄屏幕。現在,在登錄屏幕上,如果按下後退按鈕,將在堆棧清除時退出應用程序..

讓我知道,如果問題仍然存在......

+1

我的朋友,我的答案解決了您的查詢? –

+0

很棒的技巧。首先我認爲它會產生閃爍。但經過測試,它運作良好。謝謝 – shantanu

+3

很高興幫助你...很高興認識印度人。 –

0

使用onActivityResult()在這種情況下管理活動。

2

試試這個,

完成當前的活動

 YourCurrentActivity.this.finish(); 
    Intent intent1 = new Intent(YourCurrentActivity.this,LoginActivity.class); 
    intent1.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP); 
    startActivity(intent1); 

它會工作,即使你的活動是不是在堆棧。

希望它有幫助。

+0

在此流程中不起作用。 A(完成) - > B - > C(做註銷) - > A。重新按下A仍然會返回B. – topwik

8

這有點老問題,但也許別人會在尋找類似問題的答案時偶然發現它。

你應該開始用旗登錄活動:Intent.FLAG_ACTIVITY_CLEAR_TASK|Intent.FLAG_ACTIVITY_NEW_TASK - 標誌NEW_TASK可能有一點點混亂的名字,但它實際上將創建新的任務只是如果它不存在(否則當前任務將被使用) - 和CLEAR_TASK會從以前的所有活動中清除它。