Skip to content Skip to sidebar Skip to footer

Android Session Data Instantiation Related To Hardware Resource Changes (rotation, Etc) Using Fragments With Tabs

I am developing an understanding of data instantiation as it applies to the ActionBar using tabs and fragments. The below code causes the following two errors, 1) 'The method repla

Solution 1:

Below is a solution to retaining session data using fragment-tabs. I've uploaded the example project to Github. Here's the link: https://github.com/portsample/FragmentTabRotation

MainActivity

publicclassMainActivityextendsActivity{
privatefinalstaticStringTAB_KEY_INDEX="TAB_KEY";
@OverrideprotectedvoidonCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
    //put Actionbar in tab mode     ActionBaractionBar= getActionBar();
    actionBar.setNavigationMode(ActionBar.NAVIGATION_MODE_TABS);            
    //set titles for tabs
    ActionBar.Tabtab1= actionBar.newTab().setText("Tab1");
    ActionBar.Tabtab2= actionBar.newTab().setText("Tab2");
    ActionBar.Tabtab3= actionBar.newTab().setText("Tab3");
    //create instances of each of the fragmentsFragmenttab1Fragment=newTab1Fragment();
    Fragmenttab2Fragment=newTab2Fragment();
    Fragmenttab3Fragment=newTab3Fragment();
    //attach those fragment instances to their respective tabs
    tab1.setTabListener(newMyTabsListener(tab1Fragment));
    tab2.setTabListener(newMyTabsListener(tab2Fragment));
    tab3.setTabListener(newMyTabsListener(tab3Fragment));
    //add each tab to the ActionBar
    actionBar.addTab(tab1);
    actionBar.addTab(tab2);
    actionBar.addTab(tab3);
    if (savedInstanceState == null){//...do nothing                     
    }elseif (savedInstanceState != null){
    actionBar.setSelectedNavigationItem(savedInstanceState.getInt(TAB_KEY_INDEX,0));
    }
}
@OverridepublicbooleanonCreateOptionsMenu(Menu menu){
    MenuInflaterinflater= getMenuInflater();
    inflater.inflate(R.menu.main, menu);
    returntrue;
}
@OverrideprotectedvoidonSaveInstanceState(Bundle outState){
    super.onSaveInstanceState(outState);
    outState.putInt(TAB_KEY_INDEX, getActionBar().getSelectedNavigationIndex());

}   
}

MyTabsListener

publicclassMyTabsListenerimplementsActionBar.TabListener{
publicFragment fragment;   
//default constructorpublicMyTabsListener(Fragment fragment){
    this.fragment = fragment;
}   
@OverridepublicvoidonTabReselected(Tab tab, FragmentTransaction ft){
    //put code here if you want something special to happen when a user reselects a tab
}
//starts fragment when new tab is selected@OverridepublicvoidonTabSelected(Tab tab, FragmentTransaction ft){
    ft.replace(R.id.fragment_placeholder, fragment);
}
//remove fragment when tab is unselected@OverridepublicvoidonTabUnselected(Tab tab, FragmentTransaction ft){
    ft.remove(fragment);
}
}

Tab1Fragment

publicclassTab1FragmentextendsFragment{
String szSpecies;
publicstatic int iSpeciesPosition;
Spinner spinnerSpecies; 
 @OverridepublicvoidonCreate(Bundle savedDataEntryInstanceState) {
        super.onCreate(savedDataEntryInstanceState);
        setRetainInstance(true);
    }
@OverridepublicViewonCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState){
    View v = inflater.inflate(R.layout.tab1_fragment, container, false);
    spinnerSpecies = (Spinner) v.findViewById(R.id.spinnerSpeciesxml);
    if(savedInstanceState != null){
        iSpeciesPosition = savedInstanceState.getInt("speciesPosition_key");
        populateTab1Fragment(v);
    }elseif(savedInstanceState == null){
        populateTab1Fragment(v);
    }   
    return v;
}
@OverridepublicvoidonSaveInstanceState(Bundle outState){
    super.onSaveInstanceState(outState);
    iSpeciesPosition = spinnerSpecies.getSelectedItemPosition();
     outState.putInt("speciesPosition_key", iSpeciesPosition);
}
publicvoidpopulateTab1Fragment(View v){   
    //dropdown boxString [] szSpeciesArray = {"Sockeye","Marmot","Gumboot","Porpoise","Terrapin",};
    Spinner spinnerSpecies = (Spinner) v.findViewById(R.id.spinnerSpeciesxml);
    ArrayAdapter<String> arrayAdapterSpecies = newArrayAdapter<String>(this.getActivity(), R.layout.spinnerstyle, szSpeciesArray);
    arrayAdapterSpecies.setDropDownViewResource(android.R.layout.simple_dropdown_item_1line);
    spinnerSpecies.setAdapter(arrayAdapterSpecies);
    spinnerSpecies.setSelection(iSpeciesPosition);
}
}

Post a Comment for "Android Session Data Instantiation Related To Hardware Resource Changes (rotation, Etc) Using Fragments With Tabs"