Как я могу изменить название фрагмента без изменения названия MainActivity?

Вопрос: Я бы хотел, чтобы в каждом Fragment название ActionBar было адаптировано. Например, если я выбираю опцию "Списки" (это Fragment), заголовок ActionBar должен быть "списком". Я могу сделать это, используя следующий код: getActivity().setTitle("Lists"); но когда я возвращаюсь в MainActivity (используя опцию меню или кнопку "Назад" на мобильном телефоне), он сохраняет заголовок "Списки" вместо "Мое приложение",

Вопрос:

Я бы хотел, чтобы в каждом 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»); }

Оцените статью
Добавить комментарий