我已经在我的项目中实现了一个自定义Actionbar,在其中我使用了Tabs导航。这个自定义的Actionbar在右侧显示产品的徽标,而片段标签的标题则显示在左侧。因此,每次我选择一个选项卡以更改为另一个片段时,Actionbar的标题也会发生变化。
这种方法工作得很好,但现在我已经修改了它以实现PagerTabStrip。为了获得这一点,我已经包含了PagerTabStrip的相关代码,并停止在ActionBar上使用Tabs导航。
问题是我现在没有机会改变Actionbar的头衔。
这就是我现在在主要活动中使用PagerTabStrip实现Actionbar的方式:
MainActivity.java
/*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
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不兼容。
零碎:
((MainActivity)getActivity()).setActionBarTitle(getString(R.string.test_title));在MainActivity中:
public void setActionBarTitle(String title) {
abTitle.setText(title);
}所以问题是,如何使用PagerTabStrip来更改Actionbar的标题呢?为什么这个方法不能用它呢?PagerTabStrip是否以不同的方式管理片段?
发布于 2014-07-23 08:12:38
您需要在适配器上保留一个引用,以便您可以获得所需的每个片段的标题。
ViewPager viewPager = (ViewPager) findViewById(R.id.pager);
final ViewPagerAdapter adapter = new ViewPagerAdapter(getSupportFragmentManager())
viewPager.setAdapter(adapter);此外,每次选择新页面时,都必须设置actionbar的标题。在ViewPager上添加一个监听器,如下所示:
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调用放在那里的回调。
编辑:为了确保在创建/重新创建/或从后台恢复活动时设置了正确的标题,请执行以下操作:
@Override
void onResume(){
int pos = viewPager.getCurrentPosition();
String title = adapter.getPageTitle(position);
setActionBarTitle(title);
}不过,您必须在ViewPager ()调用之外设置onCreate的引用,但我相信您会理解的;)
https://stackoverflow.com/questions/24904833
复制相似问题