如何在TabHost的Activity中添加Menu选项

时间:2015-07-08 05:03:37

标签: android menu android-tabhost

我的TabHost里面有5 Activities。 我的问题是,如果我在每个活动的操作栏上添加菜单选项,它就不会显示在ActionBar上。

如果我从Menu Option活动中添加TabHost,则会显示在ActionBar上。

但是,我希望在点击Activity时为每个Menu Option添加不同的操作。

请帮助我如何实现它?

2 个答案:

答案 0 :(得分:0)

最简单的方法是使用TabHost onTabChangedListener

    tabhost.setOnTabChangedListener(new TabHost.OnTabChangeListener() {
        @Override
        public void onTabChanged(String tabId) {
            switch (tabId) {
                case "tab1":
                    //do stuff
                    break;

                 ...etc    
            }
        }
    });

这将跟踪单击哪个选项卡,您可以在那里手动交换操作。

修改要进一步扩展此功能:您可以在此处更改操作(或onClickListener如果您使用的是自定义操作栏)。对于所有外观,每次选项卡点击都没有任何变化,只有MenuOptions将执行的操作。一些可能需要优化的混乱代码;你必须自己做这件事:

tabhost.setOnTabChangedListener(new TabHost.OnTabChangeListener() {
    @Override
    public void onTabChanged(String tabId) {
        switch (tabId) {
            case "tab1":
                activity = "tab1";
                break;
            case "tab2":
                activity = "tab2";
                break;
            //etc
        }
    }
});

然后在父TabHost活动中降低,您可以按此按钮响应菜单按钮:

@Override
public boolean onOptionsItemSelected(MenuItem item) {
    switch (item.getItemId()) {
        //this handles actions for your custom button
        case R.id.menu_options:
            //we further customize it here by listening to the value of "activity" and performing actions based on that
            switch (activity) {
                case "tab1":
                    //place your actual menu action here
                    break;
                case "tab2":
                    break;
                //etc
            }
            return true;
        default:
            return super.onOptionsItemSelected(item);
    }
}

Edit2 :在StackOverflow上浏览一些Can I have different menu for each tab of TabHost,这是相似但不完全相同的,因为他们想要不同的菜单,而不是相同的菜单不同的操作。不过,可能值得一看。

答案 1 :(得分:0)

您好link的答案后,我发现我无法在TabHost内的每个活动中创建选项。

我在My TabHost活动的onOptionsItemSelected方法中使用了以下代码

@Override
public boolean onOptionsItemSelected(MenuItem item) {
    // Handle action bar item clicks here. The action bar will
    // automatically handle clicks on the Home/Up button, so long
    // as you specify a parent activity in AndroidManifest.xml.
    int id = item.getItemId();

    if (id == R.id.next) {

        Activity MyActivity = this.getCurrentActivity();

        if (Activity1.class.isInstance(MyActivity) == true) {

            ((Activity1) MyActivity).next();
        }
        if (Activity2.class.isInstance(MyActivity) == true) {

            ((Activity2) MyActivity).next();
        }
        if (Activity3.class.isInstance(MyActivity) == true) {

            ((Activity3) MyActivity).next();
        }
        if (DocumentsActivity.class.isInstance(MyActivity) == true) {
            //((DemoGraphicActivity) MyActivity).init();
            ((DocumentsActivity) MyActivity).next();
        }
        if (Activity4.class.isInstance(MyActivity) == true) {

            ((Activity4) MyActivity).next();
        }

        return true;
    }

    return super.onOptionsItemSelected(item);
}

它像魅力一样......

...欢呼声