Sumithra
Sumithra

Reputation: 49

Fragment is blank when the tab is reselected

Initially the fragment returns first and second tab's corresponding listview. But returns empty fragment for third tab. When i select the first tab once again empty fragment is getting displayed. No problem with listadapter . When i set the adapter in second tab its working fine. Problem is with Mainactivity and in Fragment

Mainactivity

public class SwipemainActivity extends AppCompatActivity
    implements NavigationView.OnNavigationItemSelectedListener
{
private TextView displayTextView;
public static SwipemainActivity instance;

TabLayout tabLayout;
ViewPager viewPager;
Context context;
FragmentAdapterClass fragmentAdapter;

public static Context getInstance() {
    return instance;
}

@Override
protected void onCreate(Bundle savedInstanceState) {

    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_swipemain);
    Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar);
    setSupportActionBar(toolbar);
    instance = this;

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

    setSupportActionBar(toolbar);

    tabLayout.addTab(tabLayout.newTab().setText("NEW"));
    tabLayout.addTab(tabLayout.newTab().setText("CONFIRMED"));
    tabLayout.addTab(tabLayout.newTab().setText("FINISHED"));

    fragmentAdapter = new FragmentAdapterClass(getSupportFragmentManager(), tabLayout.getTabCount());

    viewPager.setAdapter(fragmentAdapter);

    viewPager.addOnPageChangeListener(new TabLayout.TabLayoutOnPageChangeListener(tabLayout));

    tabLayout.setOnTabSelectedListener(new TabLayout.OnTabSelectedListener() {
        @Override
        public void onTabSelected(TabLayout.Tab LayoutTab) {

            viewPager.setCurrentItem(LayoutTab.getPosition());
        }


        @Override
        public void onTabUnselected(TabLayout.Tab LayoutTab) {

        }

        @Override
        public void onTabReselected(TabLayout.Tab LayoutTab) {

        }
    });
}
  }

Fragment

public class FragmentAdapterClass extends FragmentStatePagerAdapter {

int TabCount;

public FragmentAdapterClass(FragmentManager fragmentManager, int CountTabs) {
    super(fragmentManager);

    this.TabCount = CountTabs;

}

@Override
public Fragment getItem(int position) {

    switch (position) {

        case 0:
            Tab1 tab1 = new Tab1();
            return tab1;

        case 1:
            Tab2 tab2 = new Tab2();
            return tab2;

        case 2:
            Tab3 tab3 = new Tab3();
            return tab3;

        default:

        return null;
    }
}

@Override
public int getCount() {
    return TabCount;
}

}

Upvotes: 2

Views: 1461

Answers (1)

vanlooverenkoen
vanlooverenkoen

Reputation: 2301

I never use this listener for changing the viewpager fragment. And use the setOffScreenPageLimit to tell the viewpager how many fragments needs to be saved in memory. This is how I always setup my fragments with tabbedlayout, and viewpager.

viewPager.setOffscreenPageLimit(AMOUNT_OF_FRAGMENTS);

Upvotes: 4

Related Questions