onBackPress 未在 TabActivity 中调用



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

但是如果我错了,请启发我(以防万一,对不起)。

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

我有 2 个活动:A : 启动活动(正常活动)B : 主菜单活动 (选项卡活动)

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

活动 B 只填充 4 个子活动的选项卡主机。

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

我希望活动 B 对"后退"按钮做出反应。它不应让用户返回到初学者初始屏幕,而应将应用发送到后台(按下主页按钮)。

但活动B从未对此做出反应。永远不会写入任何日志猫输出。

这是我的活动 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。

你能帮我吗?谢谢。

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

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

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

通过回避整个情况解决了我的问题。我删除了启动活动 (A),并将其初始化函数移动到 StartScreenTab 活动 (B)。

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

相关内容

  • 没有找到相关文章

最新更新