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"