2013-10-15 99 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(); 
    } 
} 
相关问题