2010-04-07 31 views
11

我知道我可以覆蓋onKeyDown方法,但是我想回到做到這一點,只是兩次!我可以強制Android返回按鈕在活動堆棧中返回兩個步驟嗎?

+0

有一個[安卓Devlopers'的博客文章](http://android-developers.blogspot.com/2009/12/back-and-other-hard-keys-three-stories.html)關於使用後退鍵。只需設置它即可返回到您想要的任何活動。 – 2010-04-07 13:22:41

回答

2

我想它是這樣的:

A -> B -> C 

A,B,C的活動。

你不能做一回兩次因爲第一onKeyDown()會在C執行,第二個應該B.

執行

我不知道爲什麼你正在嘗試做的,但這裏有一些選項。

  1. 使用android:noHistory tag

    也許你的C的活性是做一些不需要的景色,這就是爲什麼你要備份的兩倍。

  2. 使用意圖。例如:

    Intent intent = new Intent(C.this, A.class); 
    startActivity(intent); 
    
  3. 使用finishActivityFromChild()。我從來沒有嘗試過,但看起來你可以用它來決定在B上做什麼,這取決於C如何結束。

21

FirstActivity

Intent intent = new Intent(FirstActivity.this, SecondActivity.class); 
startActivity(intent); 

SecondActivity

int REQUEST_CODE = 123 
Intent intent = new Intent(SecondActivity.this, ThirdActivity.class); 
startActivityForResult(intent, REQUEST_CODE); 

(使這個教師有更多的代碼爲低於該活性)

ThirdActivity

@Override 
public void onBackPressed() { 
    // Semi ugly way of supporting that back button takes us back two activites instead of the usual one. 
    setResultOkSoSecondActivityWontBeShown(); 
    finish(); 
} 

private void setResultOkSoSecondActivityWontBeShown() { 
    Intent intent = new Intent(); 
    if (getParent() == null) { 
    setResult(Activity.RESULT_OK, intent); 
    } else { 
     getParent().setResult(Activity.RESULT_OK, intent); 
    } 
} 

SecondActivity(再次)

@Override 
protected void onActivityResult(int requestCode, int resultCode, Intent data) { 
    if (requestCode == 123) { 
     if (resultCode == RESULT_OK) { 
      finish(); 
     } 
    } 
} 
0

| * | 讓我們回到一個屏幕或結束活動:

finish(); 

| * | 讓我們回到一個以上的屏幕:

你可以回去過屏幕上,你需要使用意圖和使用標誌,以防止回到同一個屏幕:

Intent gotoScreenVar = new Intent(goFromScreenCls.this, goToScreenCls.class); 

gotoScreenVar.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP | Intent.FLAG_ACTIVITY_NEW_TASK); 

startActivity(gotoScreenVar);