Search code examples
androidandroid-layoutandroid-fragmentsandroid-viewpagerandroid-tablayout

Viewpager with Tablayout not working proper


Here i am getting result like...

  1. Activity start..

    at at that time these two fragments calls -> Fragment 1 load -> Fragment 2 load in background

  2. swapping right (means going from frag 1 to fragment 2)

    at that time I am in fragment two and same time -> Fragment 3 load in background

  3. swapping in right (means going from Frag 2 to 3 then)

    --> there is nothing issue.

HERE IS MY CODE

Main Activity

@Override
protected void onCreate(Bundle savedInstanceState) {

    viewPager = (ViewPager) findViewById(R.id.viewpager);
    setupViewPager(viewPager);

    tabLayout = (TabLayout) findViewById(R.id.tabs);
    tabLayout.setupWithViewPager(viewPager);


}

private void setupViewPager(ViewPager viewPager) {
    ViewPagerAdapter adapter = new ViewPagerAdapter(getSupportFragmentManager());
    adapter.addFragment(new OneFragment(), "ONE");
    adapter.addFragment(new TwoFragment(), "TWO");
    adapter.addFragment(new ThreeFragment(), "THREE");
    viewPager.setAdapter(adapter);
}

This is my adapter class

class ViewPagerAdapter extends FragmentPagerAdapter {
    private final List<Fragment> mFragmentList = new ArrayList<>();
    private final List<String> mFragmentTitleList = new ArrayList<>();

    public ViewPagerAdapter(FragmentManager manager) {
        super(manager);
    }

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

    @Override
    public int getCount() {
        return mFragmentList.size();
    }
   // add fragment 
    public void addFragment(Fragment fragment, String title) {
        mFragmentList.add(fragment);
        mFragmentTitleList.add(title);
    }
    // for title
    @Override
    public CharSequence getPageTitle(int position) {
        return mFragmentTitleList.get(position);
    }
}

And there is 3 fragment right now there is nothing into that fragment .....


Solution

  • ViewPager setOffscreenPageLimit default is 1

    Please view this link Visit Documentation

    Update Please Override this method of fragment

    @Override
    public void setUserVisibleHint(boolean isVisibleToUser) {
        super.setUserVisibleHint(isVisibleToUser);
        if (isVisibleToUser) {
    
            // load data here
        }else{
            // fragment is no longer visible
        }
    }