我在项目中实现了一个自定义Actionbar,我在其中使用了Tabs导航。此自定义操作栏在右侧显示产品徽标,在左侧显示片段选项卡标题。因此,每次我选择一个选项卡以更改为另一个片段时,Actionbar的标题也会更改。
这种方法工作正常,但现在我已修改它以实现PagerTabStrip。为了得到这个,我已经包含了PagerTabStrip的相关代码,并在ActionBar上使用Tabs导航退出。
事情是,我现在不能改变动作棒的标题。
这是我现在在主Activity中使用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是否以不同的方式管理片段?
答案 0 :(得分:1)
您需要在适配器上保留一个引用,以便您可以获得所需的每个片段标题
ViewPager viewPager = (ViewPager) findViewById(R.id.pager);
final ViewPagerAdapter adapter = new ViewPagerAdapter(getSupportFragmentManager())
viewPager.setAdapter(adapter);
此外,每次选择新页面时,您都必须设置操作栏的标题。像这样在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);
}
你必须在onCreate()调用之外设置ViewPager的引用,但我相信你会弄明白的;)