2012-11-10 97 views
0

我有四個活動a,b,c,d。活動a是主要活動,然後調用b,c和d,然後進行一些計算。我知道我可以通過android:noHistory="true"屬性阻止這些活動在我的應用程序中建立活動。但問題是,如果我在活動c中,當我按下後退按鈕時,我想要轉到b,但如果d完成,我希望b和c被刪除,並且只顯示一個。有什麼辦法可以做到這一點?在android中清理活動

+0

你是否已經編碼的每個活動中的後退按鈕? – jcw

+0

沒有。我沒有重寫後退按鈕,因爲我認爲最好將後退按鈕的功能留給android系統 – user1667307

回答

1

將此代碼放入您的每項活動中,每次都稍微更改一次。你重寫了後退按鈕的正常功能

@Override 
    public boolean onKeyDown(int keyCode, KeyEvent event) { 
     if (keyCode == KeyEvent.KEYCODE_BACK 
       && event.getRepeatCount() == 0) { 
      //start the desired activity 
     } 

     return super.onKeyDown(keyCode, event); 
    } 

另外,如果你只支持安卓這樣2.0+那麼你可以使用這個

@Override 
public void onBackPressed() { 
    // start your desired activity here 
    return; 
} 

只要把其中任一在每個活動的,然後啓動正確的活動

要關閉一個特定的活動,看看這個頁面 - How to clear specific activity from the stack history?

+0

問題不在於我想重寫後退按鈕,而是關閉已經堆疊到我的堆棧上的n個活動。 – user1667307

+0

在開始新活動後,你可以用'finish()'做到這一點嗎? – jcw

+0

不是。這將簡單地關閉所有活動 - 如果我在活動c中,並且使用完成(),則只有在活動d完成時,纔會關閉活動b,c。我猜這個時候我最好的選擇是在我的活動中使用startActivityForResult() – user1667307

0

是的,它可以通過確保T爲來達到的在每個startActivity函數之後使用finish()函數。除了最後要顯示的活動外。

所以......這裏是如何看起來像

代碼放在一個:

startActivity(Intent to start activity B); 

守則B:

startActivity(Intent to start activity C); 
Finish(); 

代碼在C:

startActivity(Intent to start activity D); 
Finish(); 

這將確保每當活動D完成後,活動C也將由於完成而完成。由於此C也已完成,因此活動B中的完成()將關閉B.由於活動A中沒有完成(),該活動將顯示在屏幕上。

如果你要來活動A d完畢以後,你將不得不使用startActivityForResult和處理結果,並使用IF B中&有條件地執行完成語句C.