Я использую в своем приложении SlidingTabLayout
(из источников Google), чтобы перемещаться между различными фрагментами. Я могу провести между содержимым просто отлично, но проблема, с которой я столкнулся, - это название панели действий, которая действует странно.SlidingTabLayout и название панели действий
Предположим, что у меня есть две вкладки с двумя названиями («First Title» и «Второй Название»):
| Action bar |
| First Title | Second Title |
Когда я первый ввести фрагмент, содержащий SlidingTabLayout
, название ActionBar, как это :
| Firs... |
| First Title | Second Title |
Когда я салфетки (на второй закладке, например), название ActionBar становится:
| Second Title |
| First Title | Second Title |
И остается так. Кажется, что Actionbar принимает заголовок последнего загруженного Фрагмента, когда я прокручиваю хотя бы один раз.
То, что я хочу это:
Я хочу, чтобы показать «Main Title» в ActionBar, что никогда не меняется, независимо от того, что название в 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);
}
Я устанавливаю титул ActionBar в методе onResume
каждый раз, когда я вхожу в фрагмент.
Спасибо!
EDIT 1:
Я попытался с помощью нового SlidingTabLayout
, который я получил от Google I/O, а результат все тот же!
Похоже, что название в ActionBar является подсказкой вначале, а затем оно изменяется на последний загруженный фрагмент, когда я прокручиваю другой фрагмент.
Это как загрузочный фрагмент, и каждый раз, когда фрагмент загружается, заголовок в ActionBar переопределяется заголовком этого фрагмента.
EDIT 2:
Я изменил код, чтобы опубликовать последнюю версию этого (я использую сейчас SlidingTabLayout) и показать, как я получу свой mainTitle.
Что произойдет Если вы сократите свой первый заголовок? – Fadils
То же самое, я не думаю, что это проблема длины заголовка, так как она показывает «Второе название», когда я сажусь на другой фрагмент. –
Почему вы не устанавливаете заголовок в onCreate Activity? – NasaGeek