2010-09-29 45 views
1

我正在使用ActivityGroup產生多個活動並切換TabActivity中相同的選項卡中的視圖。ActivityGroup不處理回密鑰的ListActivity

當我按下返回鍵調用此方法我的ActivityGroup內

public void back() { 
     if(history.size() > 0) { 
      history.remove(history.size()-1); 
      if (history.size() > 0) 
      setContentView(history.get(history.size()-1)); 
      else 
       initView(); 
     }else { 
      finish(); 
     } 
    } 

這種方法可以讓我保持活動的堆棧,當按下返回鍵時,返回到前一個。

這對我所有的嵌套活動都很有效,除了在ListActivity上,後退鍵上的按鍵將簡單地退出應用程序。

+0

你能提供ActivityGroup的代碼嗎? – eyal 2011-07-07 17:07:21

回答

2

我知道你的意思......幾周前我遇到了這個問題。我也知道這是一個煩人的錯誤,我已經吸取了教訓:我永遠不會使用這種方法!所以,基本上,爲了解決這個問題,你必須爲你的代碼做一些解決方法。舉例來說,我固定的問題,我的活動,將此代碼添加到活動之一:

@Override 
public boolean onKeyDown(int keyCode, KeyEvent event) { 
    if (event.getKeyCode() == KeyEvent.KEYCODE_BACK && StatsGroupActivity.self != null) { 
     StatsGroupActivity.self.popView(); 
     return true; 
    } 
    return super.onKeyDown(keyCode, event); 
} 

請注意,我ActivityGroup被稱爲StatsGroupActivity,看起來像:

public class StatsGroupActivity extends GroupActivity{ 

    /** 
    * Self reference to this group activity 
    */ 
    public static StatsGroupActivity self; 

    public void onCreate(Bundle icicle){ 
     super.onCreate(icicle); 
     self = this; 
     // more stuff 
    } 
} 
+0

我實施了這個解決方法,它做到了。不知怎的,當Activity是ListActivity時,ActivityGroup中的onBackPressed()方法不會被調用。 – 2010-09-29 15:44:00

4

在的ActivityGroup,當ListActivity注意ActivityGroup的onKeyDown()沒有被調用,只有child的(ListActivity)onKeyDown()被調用 爲了確保ActivityGroup的onKeyDown()被調用,我們需要從ListActivity的onKeyDown()返回false。做此更改後,我能夠接收按鍵事件

0

@Cristian

我使用的是正常活動,而不是ListActivity,但有一個ListView填充它給了我同樣的問題。

我只在onPackPressed上實現了Activity而不是onKeyDown來回調MyActivityGroup調用的back()函數。

@Override 
public void onBackPressed() { 
    MyActivityGroup.group.back(); 
    return; 
} 

group是MyActivityGroup中的靜態字段。

public static MyActivityGroup group; 

back()函數將與yann.debonnel提供的相同。

我不知道這是否與您的ListActivity相同的情況下,沒有測試它。但在我的情況下,它的工作。