This application is a training exercise for me using, among other things, fragments. He has one action that controls some of the various fragments. The first is ListFragment (A), which shows when the application starts and loads the list items from the cursor. Clicking on a list item notifies the action to replace the ListFragment with DetailFragment (B) for that item. If while viewing (B) I rotate the screen, I see (B) on top (A), for example:
http://postimage.org/image/uhy016ds7/
My best guess: this is due to the fact that Android destroys and recreates the activity when the configuration changes. I am wondering what is the purest solution to this problem. Some code snippets follow, let me know if there is anything else I should post.
Res / layout / home.xml
<?xml version="1.0" encoding="utf-8"?> <FrameLayout xmlns:android="http://schemas.android.com/apk/res/android" android:id="@+id/fragment_container" android:layout_width="fill_parent" android:layout_height="fill_parent" > <fragment android:id="@+id/fragment_place_list" android:name="com.simbiosys.apps.foodfast.ui.PlaceListFragment" android:layout_width="fill_parent" android:layout_height="fill_parent" > </fragment> </FrameLayout>
MyActivity.onCreate
public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.home); placeListFragment = (PlaceListFragment) getSupportFragmentManager().findFragmentById( R.id.fragment_place_list); }
MyActivity.showDetailPane
public void showDetailPane(String id, String reference) { placeDetailFragment = PlaceDetailFragment.newInstance(id, reference); FragmentManager fragmentManager = getSupportFragmentManager(); FragmentTransaction ft = fragmentManager.beginTransaction(); ft.addToBackStack(null); ft.hide(placeListFragment); ft.replace(R.id.fragment_container, placeDetailFragment); ft.show(placeDetailFragment); ft.commit(); }
source share