2013-10-15 37 views
1

這是我的第一篇文章,我在掃描「onBackPressed」和「onKeyDown」問題的「可能提議的」解決方案之後編寫了它。我認爲他們不適合我的問題。onBackPressed未在TabActivity中調用

但是,如果我錯了,讓我知道(對不起,以防萬一)。

好的,這是我的簡單問題。

我有2個activites: 甲:起動機活性(正常活動) B:MainMenu的活性(TabActivity)

飛濺活性(A)做一些初始化東西和一些檢查。如果滿意,它只是調用主菜單Acitvity(B)的意圖。

活動B只是填充4個子活動的tabHost。

好吧,到目前爲止,它都很好。但是

我希望活動B在BACK按鈕上作出反應。它不應該讓用戶回到初始啓動畫面,而應該將應用程序發送到後臺(按下主頁按鈕)。

但是活動B從來沒有對它做出反應。沒有寫入logcat輸出。

這是我的活動B.

public class StartScreenTab extends TabActivity { 
    private final static String TAG = StartScreenTab.class.getSimpleName(); 
    private MyTabHostWrapper tabHost; 

    public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     initTab(); 

    } 

    private void initTab() { 
     Log.i(TAG, "init Main Tabs..."); 
     tabHost = new MyTabHostWrapper(this); 
     // tab Start 
     tabHost.addNewTabSpec("tab-start", R.string.app_name, 
       R.drawable.ic_tab_start, StartScreen.class); 

     // tab Karte 
     tabHost.addNewTabSpec("tab-karte", R.string.umkreis_activity_name, 
       R.drawable.ic_tab_karte, UmkreisActivity.class); 

     // tab Liste 
     tabHost.addNewTabSpec("tab-liste", R.string.liste_activity_name, 
       R.drawable.ic_tab_liste, ListeActivity.class); 

     // tab Settings 
     tabHost.addNewTabSpec("tab-prefs", R.string.menu_settings, 
       R.drawable.ic_tab_preferences, MyPrefsActivity.class); 

     tabHost.setFontColor("#FFFFFF"); 

    } 

    @Override 
    public void onDestroy(){ 
     Log.i(TAG, "onDestroy called."); 
     super.onDestroy(); 
    } 

    @Override 
    public boolean onKeyUp(int keyCode, KeyEvent event) { 
     if (keyCode == KeyEvent.KEYCODE_BACK) { 
      Log.i(TAG, "KEY 'back' released"); 
      onBackPressed(); 
      return true; 
     } 
     return super.onKeyUp(keyCode, event); 
    } 

    @Override 
    public boolean onKeyDown(int keyCode, KeyEvent event) { 
     if (keyCode == KeyEvent.KEYCODE_BACK) { 
      Log.i(TAG, "KEY 'back' pressed"); 
      onBackPressed(); 
      return true; 
     } 
     return super.onKeyDown(keyCode, event); 
    } 

    @Override 
    public void onBackPressed() { 
     super.onBackPressed(); 
     Log.i(TAG, "BACK pressed"); 
     moveTaskToBack(true); 
     return; 
    } 
} 

的代碼,我可以看到,從init,並從該的onDestroy輸出logcat中。但是onKeyDown,onKeyUp和onBackPressed都沒有。

你能幫助我嗎?謝謝。

回答

0

我認爲這可能是由tabHost引起的。我沒有爲綁定到選項卡的活動指定任何焦點命令,所以也許「後退」事件在某處丟失。

我通過迴避整個情況解決了我的問題。我刪除了啓動活動(A)並將其init函數移至StartScreenTab活動(B)。

因此,我不需要對後退事件作出任何進一步的反應,因爲標準行爲現在令人滿意。

1

原因是TabActivity失去焦點,而且我找到了解決辦法,在你的正常活動調用代碼

@Override 
public void onBackPressed() { 
    if (getParent() != null) { 
     getParent().onBackPressed(); 
    } else { 
     super.onBackPressed(); 
    } 
} 
相關問題