我SlidingTabLayout
在我的应用程序中使用(来自 Google 来源)在不同的片段之间导航。我可以很好地在内容之间滑动,但我面临的问题是动作栏的标题表现得很奇怪。
假设我有两个带有两个标题(“第一个标题”和“第二个标题”)的选项卡:
| Action bar |
| First Title | Second Title |
当我第一次输入包含 的 FragmentSlidingTabLayout
时,Actionbar 的标题是这样的:
| Firs... |
| First Title | Second Title |
当我滑动(例如到第二个选项卡)时,操作栏的标题变为:
| Second Title |
| First Title | Second Title |
并保持这种状态。当我至少滑动一次时,操作栏似乎采用了最后加载的片段的标题。
我想要的是这个:
我想在操作栏中显示一个“主标题”,无论标题SlidingTabLayout
是什么,它都不会改变。
以下是我的代码的一些部分:
** 包含 SlidingTabLayout 的片段:
private String mainTitle;
....
@Override
public void onCreate(Bundle savedInstance) {
super.onCreate(savedInstance);
// The mainTitle is given to this fragment by another fragment
Bundle args = getArguments();
if (args != null) {
mainTitle = args.getString("TITLE");
}
}
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
View rootView = inflater.inflate(R.layout.layout, container, false);
mViewPager = (ViewPager) rootView.findViewById(R.id.viewpager);
mSlidingLayout = (SlidingTabLayout) rootView.findViewById(R.id.sliding_layout);
List<Fragment> listFragments = new ArrayList<>();
List<String> listTitles = new ArrayList<>();
for (int i = 0; i < mSize; i++) {
Bundle bundle = new Bundle();
....
listFragments.add(Fragment.instanciate(getActivity(), CustomFragment.class.getName(), bundle));
listTitles.add("...");
}
mViewPager.setAdapter(new PagerAdapter(getChildFragmentManager(), listFragments, listTitles));
mSlidingLayout.setDistributedEvenly(true);
mSlidingLayout.setViewPager(mViewPager);
return rootView;
}
@Override
public void onResume() {
super.onResume();
// I TRY TO SET THE TITLE HERE !!
getActivity().getSupportActionBar().setTitle(mainTitle);
}
** 适配器:
class PagerAdapter extends FragmentPagerAdapter {
List<Fragment> fragments;
List<String> titles;
...
@Override
public Fragment getItem(int position) {
Fragment fragment = fragments.get(position);
return fragment;
}
@Override
public CharSequence getPageTitle(int position) {
// maybe the problem is in this method.
// this method is supposed to provide the titles for the tab
// but maybe it's also changing the actionbar title
return titles.get(position);
}
onResume
每次输入 Fragment 时,我都会在方法中设置 ActionBar 的标题。
谢谢 !
编辑 1:
我尝试使用SlidingTabLayout
从 Google I/O 获得的新的,结果还是一样!
似乎 ActionBar 中的 Title 最初是一个提示,然后当我滑动到另一个片段时它会变为最后加载的片段。
这就像它正在加载片段,每次加载片段时,ActionBar 中的标题都会被该片段的标题覆盖。
编辑 2:
我更改了我的代码以发布它的最新版本(我现在使用的是 SlidingTabLayout)并展示了我如何获得我的 mainTitle。