I have a project with MainActivity that hosts a fragment that hosts two other fragments using the Viewpager. It looks great on first start, but when I rotate, two fragments in the Viewpager get lost. I tried to change getFragmentManager to getChildFragmentManager, but I would get an exception from the illegal state: I could not save fragments nested in other fragments.
MainActivity.java:
import android.app.ActionBar; import android.os.Bundle; import android.view.MenuItem; import android.widget.ArrayAdapter; import android.widget.ListView; import com.jeremyfeinstein.slidingmenu.lib.SlidingMenu; import com.jeremyfeinstein.slidingmenu.lib.app.SlidingFragmentActivity; public class MainActivity extends SlidingFragmentActivity { @TargetApi(11) @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); getSupportFragmentManager() .beginTransaction() .replace(R.id.mainContentFrame, new WorkOutsContainerFrag()) .commit(); setBehindContentView(R.layout.menu); ActionBar actionBar = getActionBar(); populate(); SlidingMenu menu = getSlidingMenu(); menu.setMode(SlidingMenu.LEFT); menu.setShadowWidthRes(R.dimen.shadow_width); menu.setShadowDrawable(R.drawable.shadow); menu.setBehindWidthRes(R.dimen.slidingmenu_offset); menu.setFadeDegree(0.35f); menu.setTouchModeAbove(SlidingMenu.TOUCHMODE_FULLSCREEN); menu.setSlidingEnabled(false); setSlidingActionBarEnabled(true); actionBar.setDisplayHomeAsUpEnabled(true); } @Override public boolean onOptionsItemSelected(MenuItem item) { switch (item.getItemId()) { case android.R.id.home: toggle(); return true; default: return super.onOptionsItemSelected(item); } } private void populate() { ListView lv = (ListView) findViewById(R.id.listView1); String[] values = new String[] { "Workouts", "Information", "Ladders"}; ArrayAdapter<String> adapter = new ArrayAdapter<String>(this, android.R.layout.simple_list_item_1, android.R.id.text1, values); lv.setAdapter(adapter); }
}
WorkoutsContainerFrag.java:
import android.os.Bundle; import android.support.v4.app.Fragment; import android.support.v4.app.FragmentManager; import android.support.v4.app.FragmentPagerAdapter; import android.support.v4.view.ViewPager; import android.util.TypedValue; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; import com.astuetz.PagerSlidingTabStrip; public class WorkOutsContainerFrag extends Fragment { private PagerSlidingTabStrip tabs; private ViewPager pager; private WorkoutsPagerAdapter adapter; @Override public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { View view = inflater.inflate(R.layout.workoutscontainer, container, false); setRetainInstance(true); tabs = (PagerSlidingTabStrip) view.findViewById(R.id.workoutstabs); pager = (ViewPager) view.findViewById(R.id.workoutspager); adapter = new WorkoutsPagerAdapter(getFragmentManager()); pager.setAdapter(adapter); final int pageMargin = (int) TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP, 4, getResources() .getDisplayMetrics()); pager.setPageMargin(pageMargin); tabs.setViewPager(pager); return view;
}
private GymWorkoutsFragment gymWorkoutsFragment; private OCWorkoutsFragment ocWorkoutsFragment; public class WorkoutsPagerAdapter extends FragmentPagerAdapter { private final String[] TITLES = {"Gym Workouts", "OC Workouts"}; public WorkoutsPagerAdapter(FragmentManager fm) { super(fm); } @Override public CharSequence getPageTitle(int position) { return TITLES[position]; } @Override public int getCount() { return TITLES.length; } @Override public Fragment getItem(int position) { switch (position) { case 0: gymWorkoutsFragment = new GymWorkoutsFragment(); return (Fragment)gymWorkoutsFragment; case 1: ocWorkoutsFragment = new OCWorkoutsFragment(); return (Fragment)ocWorkoutsFragment; } return null; }
}}
android android-fragments android-viewpager pagerslidingtabstrip
Racespace
source share