TejjD
TejjD

Reputation: 2561

Fragments Re-Initializing content on Initial tab selection - ANDROID

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.

Code:

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 :

Initial View of Tab

Actual Result after Re-selecting Maps Tab:

Upon Reselecting Maps Tab

Expected Result:

What should actually happen


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!

Upvotes: 1

Views: 1158

Answers (1)

br00
br00

Reputation: 1454

Hi try to set your method setOffscreenPageLimit() of PageViewer

viewPage.setOffscreenPageLimit(3);

Upvotes: 6

Related Questions