I have an application that is using a ViewPager that acts as a TabHost. The issue is, when the application launches, all displays fine, swiping between all 3 tabs.
However upon reselecting the 1st tab, the application gets reinitialized but does not display the correct content, the app should retain the Fragments current state instead of Re-initializing.
TabAdapter.java
public class TabAdapter extends FragmentPagerAdapter{
public TabAdapter(FragmentManager fm) {
super(fm);
}
@Override
public Fragment getItem(int position) {
switch(position){
case 0:
return new MapFragmentView();
case 1:
return new LogView();
case 2:
return new SettingsView();
}
return null;
}
@Override
public int getCount() {
return 3;
}
}
MapsActivity.java (Main Activity)
public class MapsActivity extends FragmentActivity implements ActionBar.TabListener {
private ViewPager viewPage;
private TabAdapter myAdapter;
private ActionBar actionBar;
public static FragmentManager fragmentManager;
private String[] tabNames = {"Map", "Log" , "Settings"};
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_maps);
fragmentManager = getFragmentManager();
viewPage = (ViewPager) findViewById(R.id.pager);
actionBar = getActionBar();
myAdapter = new TabAdapter(getSupportFragmentManager());
viewPage.setAdapter(myAdapter);
actionBar.setHomeButtonEnabled(false);
actionBar.setNavigationMode(ActionBar.NAVIGATION_MODE_TABS);
// Adding Tabs
for (String tab_name : tabNames) {
actionBar.addTab(actionBar.newTab().setText(tab_name)
.setTabListener(this));
}
viewPage.setOnPageChangeListener(new ViewPager.OnPageChangeListener() {
@Override
public void onPageSelected(int position) {
// on changing the page
// make respected tab selected
actionBar.setSelectedNavigationItem(position);
}
@Override
public void onPageScrolled(int arg0, float arg1, int arg2) {
}
@Override
public void onPageScrollStateChanged(int arg0) {
}
});
}
@Override
public void onTabSelected(ActionBar.Tab tab, FragmentTransaction ft) {
viewPage.setCurrentItem(tab.getPosition());
}
@Override
public void onTabUnselected(ActionBar.Tab tab, FragmentTransaction ft) {
}
@Override
public void onTabReselected(ActionBar.Tab tab, FragmentTransaction ft) {
viewPage.setCurrentItem(tab.getPosition());
}
}
Initial View :
Actual Result after Re-selecting Maps Tab:
Expected Result:
I understand that in the TabAdapter file, we are creating New Instances everytime the getPosition is called, so that might be the issue.
Any help will be greatly appreciated!
Hi try to set your method setOffscreenPageLimit() of PageViewer
viewPage.setOffscreenPageLimit(3);