I use the code below to setup my TabLayout inside a Fragment. The problem is that the tabs are not swiping even though I used registerOnPageChangeCallback(). When I add fragment containing tablayout to a bottom navigation view then when swiping the tablayout goes to a white screen with no fragments. What am I doing wrong?
If i use tablayout in activity it can be swiped as usual.
public class BookcaseFragment extends Fragment {
    private TabLayout tabLayout;
    private ViewPager2 mViewPager;
    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container,
                             Bundle savedInstanceState) {
        // Inflate the layout for this fragment
        return inflater.inflate(R.layout.fragment_bookcase, container, false);
    }
    @Override
    public void onViewCreated(@NonNull View view, @Nullable Bundle savedInstanceState) {
        super.onViewCreated(view, savedInstanceState);
        tabLayout = view.findViewById(R.id.tab_layout_bookcase);
        mViewPager = view.findViewById(R.id.bookcase_viewpager);
        BookcaseViewPagerAdapter adapter = new BookcaseViewPagerAdapter(this);
        mViewPager.setAdapter(adapter);
        new TabLayoutMediator(tabLayout, mViewPager, (tab, position) -> {
            switch (position){
                case 0:
                    tab.setText("following");
                    break;
                case 1:
                    tab.setText("downloaded");
                    break;
                case 2:
                    tab.setText("watched");
                    break;
            }
        }).attach();
        mViewPager.registerOnPageChangeCallback(new ViewPager2.OnPageChangeCallback() {
            @Override
            public void onPageSelected(int position) {
                super.onPageSelected(position);
                tabLayout.getTabAt(position).select();
                System.out.println(position);
            }
        });
    }
}
public class BookcaseViewPagerAdapter extends FragmentStateAdapter {
    public BookcaseViewPagerAdapter(@NonNull Fragment fragment) {
        super(fragment);
    }
    @NonNull
    @Override
    public Fragment createFragment(int position) {
        switch (position){
            case 0:
                return new FollowingFragment();
            case 1:
                return new DownloadedFragment();
            case 2:
                return new JustWatchedFragment();
            default:
                return new FollowingFragment();
        }
    }
    @Override
    public int getItemCount() {
        return 3;
    }
}
 
    