首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Android检测选定的选项卡并更改ActionBar

Android检测选定的选项卡并更改ActionBar
EN

Stack Overflow用户
提问于 2014-08-15 13:09:50
回答 2查看 6.8K关注 0票数 2

嗨,我有一个ActionBar,其中包含一个TabBar,在每个选项卡上,我想要更改actionbar标题/图标,基于哪个选项卡被选中。如何检测我在哪个选项卡上并运行if语句,例如if tab = tab1 then set actionbar title

这是我的活动

代码语言:javascript
复制
         ActionBar actionbar = getActionBar();
         actionbar.setNavigationMode(ActionBar.NAVIGATION_MODE_TABS);
         getActionBar().setTitle("");
         getActionBar().setIcon(R.drawable.ab_logo);
         getActionBar().setBackgroundDrawable(new ColorDrawable(Color.parseColor("#000000")));
         actionbar.setStackedBackgroundDrawable(new ColorDrawable(Color.parseColor("#eeeeee")));


         LayoutInflater inflater = (LayoutInflater) getSystemService(LAYOUT_INFLATER_SERVICE);
         View tabView = inflater.inflate(R.layout.tab_3, null);


         ActionBar.Tab Tab1 = actionbar.newTab().setIcon(R.drawable.ic_tab_1);
         ActionBar.Tab Tab2 = actionbar.newTab().setIcon(R.drawable.ic_tab_2);
         ActionBar.Tab Tab3 = actionbar.newTab().setCustomView(tabView);
         ActionBar.Tab Tab4 = actionbar.newTab().setIcon(R.drawable.ic_tab_4);
         ActionBar.Tab Tab5 = actionbar.newTab().setIcon(R.drawable.ic_tab_5);



         Fragment Fragment1 = new Fragment1();
         Fragment Fragment2 = new Fragment2();
         Fragment Fragment3 = new Fragment3();
         Fragment Fragment4 = new Fragment4();
         Fragment Fragment3 = new Fragment5();


         Tab1.setTabListener(new MyTabsListener(Fragment1));
         Tab2.setTabListener(new MyTabsListener(Fragment2));
         Tab3.setTabListener(new MyTabsListener(Fragment3));
         Tab4.setTabListener(new MyTabsListener(Fragment4));
         Tab5.setTabListener(new MyTabsListener(Fragment5));

         actionbar.addTab(Tab1);
         actionbar.addTab(Tab2);
         actionbar.addTab(Tab3);
         actionbar.addTab(Tab4);
         actionbar.addTab(Tab5);

    }


    @Override
    protected void onSaveInstanceState(Bundle outState) {
        super.onSaveInstanceState(outState);
        outState.putInt("tab", getActionBar().getSelectedNavigationIndex());
    }

}

这是我的TabListener类

代码语言:javascript
复制
public class TabListener implements ActionBar.TabListener {
    public Fragment fragment;
    public Context c;
    public ActionBar actionbar;

    public TabListener(Fragment fragment, Context con) {
        this.fragment = fragment;
        this.c = con;
    }   



    @Override
    public void onTabReselected(Tab tab, FragmentTransaction ft) {


    }

    @Override
    public void onTabSelected(Tab tab, FragmentTransaction ft) {
        ft.replace(R.id.fragment_container, fragment);

    }

    @Override
    public void onTabUnselected(Tab tab, FragmentTransaction ft) {


    }

}
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2014-08-15 13:46:21

您也可以在您的onTabSelected方法中这样做。

代码语言:javascript
复制
public void onTabSelected(Tab tab, FragmentTransaction ft) {
    ft.replace(R.id.fragment_container, fragment);

    switch (tab.getPosition()) {
        case 1:
            actionbar.setTitle("new title");
            actionbar.setIcon(iconDrawable);
            break;
        case 2:
            actionbar.setTitle("new title");
            actionbar.setIcon(iconDrawable);
            break;
    }
}
票数 3
EN

Stack Overflow用户

发布于 2014-08-15 13:38:19

您可以在每个片段中这样做:

代码语言:javascript
复制
private ActionBar actionBar;

在onActivityCreated中:

代码语言:javascript
复制
actionBar = ((ActionBarActivity)getActivity()).getSupportActionBar();

in片段onCreateView法

代码语言:javascript
复制
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
        Bundle savedInstanceState) {
    View rootView = inflater.inflate(R.layout.fragment_main, container, false);
    setHasOptionsMenu(true);
    return rootView;
}

然后在onCreateOptionsMenu(菜单,MenuInflater充气器)方法中

代码语言:javascript
复制
@Override
public void onCreateOptionsMenu(Menu menu, MenuInflater inflater) {
    super.onCreateOptionsMenu(menu, inflater);
    // Clear old menu.
    menu.clear();
    // Inflate new menu.
    inflater.inflate(R.menu.your_fragment_menu, menu);
    // Set actionbar title and icon.
    actionBar.setTitle("your fragment title");
    actionBar.setIcon(R.drawable.ic_fragment);
}

希望这个答案对你有帮助。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/25326976

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档