Загрузка фрагментов через FragmentStateAdapter (Android, Java)

В приложении создан FragmentStateAdapter и три адаптера:

public class MainPagerAdapter extends FragmentStateAdapter
{    
    public MainPagerAdapter(@NonNull FragmentActivity fragmentActivity)
    {
        super(fragmentActivity);
    }

    @NonNull
    @Override
    public Fragment createFragment(int position)
    {    
        switch (position)
        {
            case 0:
            {
                FirstFragment firstFragment = new FirstFragment();    
                return firstFragment;
            }
            case 1:
            {
                SecondFragment secondFragment = new SecondFragment();    
                return secondFragment;
            }
            case 2:
            {
                ThirdFragment thirdFragment = new ThirdFragment();    
                return thirdFragment;
            }
        }

        return new FirstFragment();
    }

    @Override
    public int getItemCount()
    {
        return 3;
    }
}

В MainActivity использую ViewPager2 и BottomNavigationView:

public class MainActivity extends AppCompatActivity
{
    private ViewPager2 viewPager;
    private MainPagerAdapter pagerAdapter;
    private BottomNavigationView bottomNavigationView;

    @Override
    protected void onCreate(Bundle savedInstanceState)
    {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        bottomNavigationView = findViewById(R.id.bottomNavigationView);
        viewPager = findViewById(R.id.viewPager);

        pagerAdapter = new MainPagerAdapter(this);    
        viewPager.setAdapter(pagerAdapter);

        bottomNavigationView = findViewById(R.id.bottomNavigationView);

        bottomNavigationView.setOnNavigationItemSelectedListener(
                item ->
                {
                    switch (item.getItemId())
                    {
                        case R.id.nav1:
                            viewPager.setCurrentItem(0);
                            return true;
                        case R.id.nav2:
                            viewPager.setCurrentItem(1);
                            return true;
                        case R.id.nav3:
                            viewPager.setCurrentItem(2);
                            return true;
                        default:
                            return false;
                    }
                });
    }
}

Навигация построена на ViewPager2. Проблема в том, что при открытии приложения подгружается сначала первый фрагмент FirstFragment, а только после того как свайпнуть по экрану или нажать на меню bottomNavigationView срабатывает onCreateView для второго и третьего фрагментов одновременно:

public class FirstFragment extends Fragment
{
    @Nullable
    @Override
    public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState)
    {
        Log.d(TAG, "FirstFragment");

        View view = inflater.inflate(R.layout.fragment_messages, container, false);
        return view;
    }
}

Не совсем понимаю почему FragmentStateAdapter ведёт себя таким образом. Подскажите, как правильно организовать загрузку фрагментов через адаптер? Чтобы при загрузке приложения подгружались сразу все фрагменты (FirstFragment, SecondFragment, ThirdFragment) или по очереди (при загрузке приложения первый фрагмент, при свайпе или переходе на фрашмент следующий).


Ответы (0 шт):