代码之家  ›  专栏  ›  技术社区  ›  Ragnus

在TabActivity中未调用onBackPressed

  •  1
  • Ragnus  · 技术社区  · 11 年前

    这是我的第一篇文章,我是在扫描了“onBackPressed”和“onKeyDown”问题的一些“可能提出的”解决方案后写的。我认为它们不适合我的问题。

    但如果我错了,请原谅我(如果是这样的话,请原谅)。

    好的,这是我的简单问题。

    我有两项活动: A:起动机活动(正常活动) B:主菜单活动(选项卡活动)

    飞溅活动(A)做一些初始化和检查。如果它满意,它只需调用主菜单Acitvity(B)的意图。

    活动B只为4个子活动填充一个tabHost。

    好的,到目前为止一切都很好。但是

    我希望活动B对“返回”按钮做出反应。它不应该让用户回到启动程序的启动屏幕,而是应该将应用程序发送到后台(按下主页按钮)。

    但活动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都没有。

    你能帮帮我吗?谢谢。

    2 回复  |  直到 11 年前
        1
  •  1
  •   cui jack    9 年前

    原因是TabActivity失去了焦点,我找到了解决方案,在正常的“活动”中调用代码

    @Override
    public void onBackPressed() {
        if (getParent() != null) {
            getParent().onBackPressed();
        } else {
            super.onBackPressed();
        }
    }
    
        2
  •  0
  •   Ragnus    11 年前

    我认为这可能是由tabHost引起的。我没有为绑定到选项卡的活动指定任何焦点命令,所以“back”事件可能在某个地方丢失了。

    我回避了整个情况,解决了我的问题。我删除了splash活动(A),并将其init函数移到了StartScreenTab活动(B)。

    所以我不需要对背部事件做出任何进一步的反应,因为现在的标准行为是令人满意的。