@Neonoviiwolf
Flutter developer

Проблема с TabLayout, при возвращении на прежний Fragment не срабатывает проверка if (savedInstanceState == null)?

Доброго
Есть проблема, когда листаю фрагменты, то при возвращении на первый у меня почему-то Bundle равен null и происходит повторное создание фрагментов.
При повороте экрана всё норм
вот так выглядит

5ba32b36aa795828523366.jpeg

//////////////////////////////////////////////////////////////////////

5ba32b457d38d289771609.jpeg

отрывок из main
private void initTab() {
        viewPager = findViewById(R.id.main_view_pager);
        adapter = new TabsFragmentPageAdapter(getSupportFragmentManager(), this);
        adapter.addFragment(new MainFragmentCreateMenu());
        adapter.addFragment(new MainFragmentWatchProgress());
        adapter.addFragment(new MainFragmentAddProductMenu());
        viewPager.setAdapter(adapter);
        tabLayout = findViewById(R.id.main_tab_layout);
        tabLayout.setupWithViewPager(viewPager);
    }

сам адаптер
public class TabsFragmentPageAdapter extends FragmentPagerAdapter {

    private String[] titleFragment;

    public TabsFragmentPageAdapter(FragmentManager fm, AppCompatActivity app) {
        super(fm);
        this.titleFragment = app.getResources().getStringArray(R.array.main_menu);
    }

    private final List<Fragment> mFragmentList = new ArrayList<>();

    @Override
    public Fragment getItem(int position) {
        return mFragmentList.get(position);
    }

    @Nullable
    @Override
    public CharSequence getPageTitle(int position) {
        return titleFragment[position];
    }

    @Override
    public int getCount() {
        return titleFragment.length;
    }

    public void addFragment(Fragment fragment) {
        mFragmentList.add(fragment);

    }
}


сам фрагмент

public class MainFragmentCreateMenu extends Fragment {

    private View rootView;
    private FragmentTransaction transaction;
    private CreateMenuDate menuDate;
    private ViewGroup container;

    @Nullable
    @Override
    public View onCreateView(@NonNull LayoutInflater inflater,
                             @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
        rootView = inflater.inflate(R.layout.create_menu, container, false);
        this.container = container;
        if (savedInstanceState == null) { //тут при возврате в этот фрагмент повторно всё вызывается
            transaction = getChildFragmentManager().beginTransaction();
            menuDate = new CreateMenuDate();
            transaction.add(R.id.create_menu_main_container, menuDate);

            transaction.add(R.id.create_menu_main_container, new CreateMenuCardViewForItem());

            transaction.commit();
        }
        return rootView;
    }
}
  • Вопрос задан
  • 29 просмотров
Решения вопроса 1
@zeekenru
OnSaveInstantState вызывается только тогда, когда когда изменяется конфигурация (как вы написали, при повороте экрана у вас условие выполняется) и фрагмент уничтожается системой. FragmentPagerAdapter никогда не удаляет фрагмент из оперативной памяти, даже если он не виден в UI. Попробуйте использовать FragmentStatePagerAdapter и не забудьте реализовать метод OnSaveInstanceState
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы