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;
}
}