我已经环顾了几天试图解决这个问题,我似乎无法将其缩小到我的具体问题 .
我有一个使用4片段的应用程序,通常是FragmentPagerAdapter,TabLayout等 . 我正在使用普通的ActionBar并想要更新ActionBar的 Headers 以反映我当前所在的4个片段中的哪一个 .
我已经实现了某人的解决方案来改变 Headers ,但它并没有真正起作用:
((MainActivity) getActivity()).setActionBarTitle("Locations");
有了上面的代码,由于一些我无法理解的奇怪的原因, Headers 总是从我当前的那个片段开始!因此,当我在“食物”碎片上时, Headers 会显示“照片”,这是它之后的下一个片段的 Headers . 我已经尝试将此代码放在我的onCreateView(),onActivityCreated()和onResume()中,每个片段,但结果是相同的 - Headers 不适用于正确的片段 .
我将使用我当前的代码,以便可以发现任何问题......
注意:我不想更改TabLayout中每个Tab的 Headers ,因为我为这些设置了图标,我只想更改与当前显示的Fragment相关的ActionBar Headers . :)
FragmentPagerAdapter:
public class CategoryAdapter extends FragmentPagerAdapter {
private Context mContext;
public CategoryAdapter(Context context, FragmentManager fm) {
super(fm);
mContext = context;
}
@Override
public Fragment getItem(int position) {
if (position == 0) {
return new Locations();
} else if (position == 1) {
return new Food();
} else if (position == 2) {
return new Photos();
} else {
return new History();
}
}
@Override
public int getCount() {
return 4;
}
@Override
public CharSequence getPageTitle(int position) {
return null;
}
}
MainActivity class:
public class MainActivity extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
ViewPager viewPager = (ViewPager) findViewById(R.id.viewpager);
CategoryAdapter adapter = new CategoryAdapter(this, getSupportFragmentManager());
viewPager.setAdapter(adapter);
TabLayout tabLayout = (TabLayout) findViewById(R.id.tabs);
int[] imageResId = {
R.drawable.ic_place_white_48dp,
R.drawable.ic_restaurant_white_48dp,
R.drawable.ic_wallpaper_white_48dp,
R.drawable.ic_account_balance_white_48dp};
for (int i = 0; i < tabLayout.getTabCount(); i++) {
tabLayout.getTabAt(i).setIcon(imageResId[i]);
}
}
public void setActionBarTitle(String title) {
getSupportActionBar().setTitle(title);
}
}
有任何想法吗?非常感谢你的帮助!
1 回答
你可以试试这个 .
1.use setupWithViewPager method
2.you must use setIcon method after setupWithViewPager method
3.set default ActionBar title
4.set ActionBar title when tab is selected
5.remove ((MainActivity) getActivity()).setActionBarTitle("Locations"); in fragment