首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用PagerTabStrip更改ActionBar的标题

使用PagerTabStrip更改ActionBar的标题
EN

Stack Overflow用户
提问于 2014-07-23 07:57:40
回答 1查看 1.1K关注 0票数 0

我已经在我的项目中实现了一个自定义Actionbar,在其中我使用了Tabs导航。这个自定义的Actionbar在右侧显示产品的徽标,而片段标签的标题则显示在左侧。因此,每次我选择一个选项卡以更改为另一个片段时,Actionbar的标题也会发生变化。

这种方法工作得很好,但现在我已经修改了它以实现PagerTabStrip。为了获得这一点,我已经包含了PagerTabStrip的相关代码,并停止在ActionBar上使用Tabs导航。

问题是我现在没有机会改变Actionbar的头衔。

这就是我现在在主要活动中使用PagerTabStrip实现Actionbar的方式:

MainActivity.java

代码语言:javascript
复制
/*Inflate your custom actionBar layout*/
final ViewGroup actionBarLayout = (ViewGroup) getLayoutInflater().inflate(R.layout.custom_actionbar, null);

abTitle = (TextView) actionBarLayout.findViewById(R.id.abtitle);

actionBar = getSupportActionBar();
/*Hide default icon*/
actionBar.setDisplayShowHomeEnabled(false);
/*Hide default title*/
actionBar.setDisplayShowTitleEnabled(false);
/*Enable custom view*/
actionBar.setDisplayShowCustomEnabled(true);
actionBar.setCustomView(actionBarLayout);

ViewPager viewPager = (ViewPager) findViewById(R.id.pager);
viewPager.setAdapter(new ViewPagerAdapter(getSupportFragmentManager()));

ViewPagerAdapter.java

代码语言:javascript
复制
public class ViewPagerAdapter extends FragmentPagerAdapter {

    final int PAGE_COUNT = 2;
    /*Tab Titles*/
    private final String tabtitles[] = new String[] { "TEST", "SETTINGS"};
    Context context;


    public ViewPagerAdapter(FragmentManager fm) {
        super(fm);
    }


    @Override
    public Fragment getItem(int position) {
        switch (position) {
            case 0:
                Fragment1 fragmenttab1 = new Fragment1();
                return fragmenttab1;
            case 1:
                Fragment2 fragmenttab2 = new Fragment2();
                return fragmenttab2;
        }
        return null;
    }

    @Override
    public int getCount() {
        return PAGE_COUNT;
    }

    @Override
    public CharSequence getPageTitle(int position) {
        return tabtitles[position];
    }
}

这就是我在使用制表符时更改Actionbar标题的方式,而这似乎与PagerTabStrip不兼容。

零碎:

代码语言:javascript
复制
((MainActivity)getActivity()).setActionBarTitle(getString(R.string.test_title));

在MainActivity中:

代码语言:javascript
复制
public void setActionBarTitle(String title) {
    abTitle.setText(title);
}

所以问题是,如何使用PagerTabStrip来更改Actionbar的标题呢?为什么这个方法不能用它呢?PagerTabStrip是否以不同的方式管理片段?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2014-07-23 08:12:38

您需要在适配器上保留一个引用,以便您可以获得所需的每个片段的标题。

代码语言:javascript
复制
ViewPager viewPager = (ViewPager) findViewById(R.id.pager);
final ViewPagerAdapter adapter = new ViewPagerAdapter(getSupportFragmentManager())
viewPager.setAdapter(adapter);

此外,每次选择新页面时,都必须设置actionbar的标题。在ViewPager上添加一个监听器,如下所示:

代码语言:javascript
复制
 viewPager.setOnPageChangeListener(new ViewPager.OnPageChangeListener() {


                    @Override
                    public void onPageScrollStateChanged(int state) {

                    }

                    @Override
                    public void onPageScrolled(int position,
                            float positionOffset, int positionOffsetPixels) {
                        }

                    @Override
                    public void onPageSelected(int position) {
                    //A new page has been selected. Change the title here
                    String title = adapter.getPageTitle(position);
                    (MainActivity)getActivity()).setActionBarTitle(title);

                    }

      }

查看一下onPageSelected方法。这是您需要重写并将setTitle调用放在那里的回调。

编辑:为了确保在创建/重新创建/或从后台恢复活动时设置了正确的标题,请执行以下操作:

代码语言:javascript
复制
@Override
void onResume(){
    int pos = viewPager.getCurrentPosition();
    String title = adapter.getPageTitle(position);
    setActionBarTitle(title);
}

不过,您必须在ViewPager ()调用之外设置onCreate的引用,但我相信您会理解的;)

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

https://stackoverflow.com/questions/24904833

复制
相关文章

相似问题

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