Vendii
Vendii

Reputation: 297

After orientation change, optionsmenu of fragment doesn't disappear

I implemented my layout based on this tutorial: http://android-developers.blogspot.hu/2011/02/android-30-fragments-api.html

The differences are:

My problem is that if I have already selected something from the left and then rotate the phone to portrait, the last optionsmenu is still there and is visible.

I think the problem comes from the last active "details" fragment is recreated after the orientation change. to test it I created these two methods:

@Override
public void onStart() {
    super.onStart();
    setHasOptionsMenu(true);
}

@Override
public void onStop() {
    super.onStop();
    setHasOptionsMenu(false);
}

And I'm showing the right fragment like this:

case R.id.prefs_medicines:
        if (mDualPane) {


            // Check what fragment is shown, replace if needed.
            View prefsFrame = getActivity().findViewById(R.id.preferences);
            if (prefsFrame != null) {
                // Make new fragment to show this selection.
                MedicineListF prefF = new MedicineListF();

                // Execute a transaction, replacing any existing
                // fragment with this one inside the frame.
                FragmentTransaction ft = getFragmentManager().beginTransaction();
                ft.replace(R.id.preferences, prefF);
                ft.setTransition(FragmentTransaction.TRANSIT_FRAGMENT_FADE);
                ft.commit();
            }

        } else {
            // Otherwise we need to launch a new activity to display
            // the dialog fragment with selected text.
            Intent intent = new Intent();
            intent.setClass(getActivity(), MedicinePrefsActivity.class);
            startActivity(intent);
        }
        break;

in one of my "details" fragment. when I debugged it, the onstart was called after the rotation.

The problem in pictures:

1: in landscape it's OK Landscape mode http://img834.imageshack.us/img834/8918/error1d.png

2: in portrait: optionsmenu not needed Portrait mode http://img860.imageshack.us/img860/8636/error2r.png

How can I get rid of the optionsmenu in portrait mode?

Upvotes: 4

Views: 1914

Answers (1)

sidler
sidler

Reputation: 123

I had the same problem, and resolved it by setting setHasOptionsMenu(true) in the fragment only when savedInstanceState is null. If onCreate gets a bundle then the fragment is being restored in an orientation change to portrait, so don't display the menu.

@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);

    if(savedInstanceState == null) {
        setHasOptionsMenu(true);
    }
}       

Upvotes: 5

Related Questions