Вопрос:
Я бы хотел, чтобы в каждом Fragment название ActionBar было адаптировано. Например, если я выбираю опцию “Списки” (это Fragment), заголовок ActionBar должен быть “списком”.
Я могу сделать это, используя следующий код:
getActivity().setTitle(«Lists»);
но когда я возвращаюсь в MainActivity (используя опцию меню или кнопку “Назад” на мобильном телефоне), он сохраняет заголовок “Списки” вместо “Мое приложение”, которое является заголовком по умолчанию.
Если я попытаюсь установить заголовок в MainActivity:
setTitle(«My application»);
он не изменяется.
Как я могу сохранить заголовок MainActivity и изменить заголовок в каждом из Fragments?
Заранее спасибо!
Лучший ответ:
Наконец, я могу изменить название своей MainActivity после входа в Fragment и изменить название ActionBar в нем. Мне нужно было изменить его с помощью двух разных событий: когда я нажимаю на меню приложения и когда я нажимаю кнопку на мобильном телефоне. Я отдам свой ответ в двух частях, по одному для каждого события:
– Чтобы изменить название на MainActivity, когда вы нажмете кнопку “Назад” на своем мобильном телефоне
Вам нужно использовать onBackPressed() на вашем MainActivity.class для обнаружения события, а затем использовать метод setTitle для изменения названия вашего ActionBar.
@Override public void onBackPressed() { setTitle(«Lists»); }
– Чтобы изменить заголовок на MainActivity, когда вы нажимаете опцию “Главная” в своем меню.
В вашем методе onNavigationItemSelected вы можете обнаружить, когда вы нажимаете опцию “Домой”, а затем запускаете новый Fragment (пусть его MainFragment), который возвращает пустой макет, поэтому, если вы находитесь в другом Fragment, например AnotherFragment (с другим заголовком ActionBar) и вы нажимаете кнопку “Главная” в своем меню, вы можете снова установить заголовок своей MainActivity по умолчанию в своем MainFragment со следующим кодом:
getActivity().setTitle(«Lists»);
Таким образом, вы сможете изменить заголовок своей MainActivity поддерживая его макет.
Ответ №1
Попробуйте использовать getSupportActionBar(). SetTitle (“title”);
Это то, что я использую, и это, кажется, работает хорошо. Вот пример использования моего кода, где я добавляю фрагменты в просмотрщик.
private void addPages(ViewPager pager) { MyFragPagerAdapter adapter = new MyFragPagerAdapter(getSupportFragmentManager()); Intent intent = getIntent(); String workout = intent.getStringExtra(«work»); Bundle args = new Bundle(); args.putString(«work», work); String title = args.getString(«work»); switch(title) { case «w29w1» : { getSupportActionBar().setTitle(«Work 29 Week 1»); break; } case «w29w2» : { getSupportActionBar().setTitle(«Work 29 Week 2»); break; } MondayFragment mondayFragment = new MondayFragment(); mondayFragment.setArguments(args);
В этом примере я просто устанавливаю заголовок панели инструментов на что-то, в зависимости от намерения, которое он получил от предыдущего класса, поскольку фрагмент используется для нескольких наборов данных.
Ответ №2
Поместите этот код в onResume() как для активности, так и для фрагмента
Фрагмент:
@Override public void onResume() { super.onResume(); if(getActivity().getSupportActionBar()!=null) getActivity().getSupportActionBar().setTitle(«Lists»); }
Мероприятия:
@Override protected void onResume() { super.onResume(); if(getSupportActionBar()!=null) getSupportActionBar().setTitle(«Title»); }