Что есть:
У меня в приложении есть BottomNavigationView, в котором находится 3 кнопки, при нажатии на которые идет смена фрагментов в Activity
.
Вот таким способом:
bottomNavigation.setOnNavigationItemSelectedListener(new BottomNavigationView.OnNavigationItemSelectedListener() {
@Override
public boolean onNavigationItemSelected(@NonNull MenuItem item) {
int id = item.getItemId();
switch (id){
case R.id.action_dialogs:
fragment = new DialogsFragment();
break;
case R.id.action_profile:
fragment = new ProfileFragment();
break;
case R.id.action_setting:
fragment = new SettingsFragment();
break;
}
transaction = fragmentManager.beginTransaction();
transaction.setTransition(FragmentTransaction.TRANSIT_FRAGMENT_FADE);
transaction.replace(R.id.fragmentContainer, fragment).commit();
return true;
}
});
Проблема:
Но при переключении фрагментов они заново пересоздаются. Как это исправить?
Всем заранее спасибо!
В самом простом, но не лучшем варианте, Вы можете просто кэшировать фрагменты, если это необходимо. Просто не создавайте их заново с помощью new
каждый раз, а сохраните как поля Вашей Activity
(но так они не переживут поворот девайса) или как синглтоны. Такой метод далёк от идеала, но в зависимости от того, что Вы делаете, можно воспользоваться им как наиболее простым.
В качестве альтернативы вот тут ещё человек предлагает их кэшировать в бэк стеке.
Вообще в пересоздании фрагментов нет ничего плохого. В общем случае лучше было бы добавить возможность сохранить введённые данные и пересоздать фрагмент с определённой информацией, оставшейся от предыдущего, например, сохранить введённые данные в базу или SharedPreferences
и прочитать при инициализации фрагмента или передать в качестве аргументов.
Современные решения для бизнеса: как облачные и виртуальные технологии меняют рынок
Виртуальный выделенный сервер (VDS) становится отличным выбором
Нужно рассчитать для байтового массива сумму по алгоритму RipeMd-128Никак не найду, как
Читаю данные из json с помощью GsonИ в одном активити я хочу изменить значения ключа одного обьекта
Я пишу REST клиент, для парсинга JSON'a, я использую для этого Retrofit 2