android onCreateOptionsMenu hat beim Wiederherstellen des Status zweimal aufgerufen

Hier ist eine einfache Android-App, die ich erstellt habe, um mein Problem zu demonstrieren:

public class OptionMenuTest extends Activity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        Log.d("test", "create activity");
        setContentView(R.layout.options_layout);
        if(getFragmentManager().findFragmentByTag("frag") == null) {
            getFragmentManager().beginTransaction().add(R.id.option_fragment_container, new OptionMenuFragment(), "frag").commit(); 
        }

    }

    @Override
    protected void onSaveInstanceState(Bundle outState) {
        Log.d("test", "saving Activity state");
        super.onSaveInstanceState(outState);
    }

    @Override
    public boolean onCreateOptionsMenu(Menu menu) {
        Log.d("test", "create Activity options menu");
        menu.add("activity");
        return true;
    }
}

Fragment:

public class OptionMenuFragment extends Fragment {

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        Log.d("test", "create fragment");
        setHasOptionsMenu(true);
    }

    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
        TextView tv = new TextView(getActivity());
        tv.setText("Hello world");
        Log.d("test", "create fragment view");
        return tv;
    }

    @Override
    public void onCreateOptionsMenu(Menu menu, MenuInflater inflater) {
        menu.add("fragment");
        Log.d("test", "create fragment options menu");
    }
}

Layout ist nur ein LinearLayout, in das das Fragment geschrieben werden kann:

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@+id/option_fragment_container"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    >
</LinearLayout>

Ganz einfach, oder? Wenn ich es laufen lasse, erhalte ich die folgende Ausgabe wie erwartet:

06-12 15:42:51.415: D/test(957): create activity
06-12 15:42:51.446: D/test(957): create fragment
06-12 15:42:51.446: D/test(957): create fragment view
06-12 15:42:51.446: D/test(957): create Activity options menu
06-12 15:42:51.446: D/test(957): create fragment options menu

Wenn ich das Telefon drehe, tritt ein merkwürdiges Verhalten auf:

06-12 15:43:11.251: D/test(957): saving Activity state
06-12 15:43:11.290: D/test(957): create fragment
06-12 15:43:11.290: D/test(957): create activity
06-12 15:43:11.306: D/test(957): create fragment view
06-12 15:43:11.306: D/test(957): create Activity options menu
06-12 15:43:11.306: D/test(957): create fragment options menu
06-12 15:43:11.306: D/test(957): create Activity options menu
06-12 15:43:11.306: D/test(957): create fragment options menu

Warum wird die Aktivität onCreateOptionMenu und das Fragment onCreateOptionsMenu zweimal aufgerufen? Wenn ich das Optionsmenü aus dem Fragment entferne, erhalte ich wie erwartet einen Aufruf der Aktivität onCreateOptionsMenu:

06-12 15:50:03.610: D/test(1076): create fragment
06-12 15:50:03.610: D/test(1076): create fragment view
06-12 15:50:03.813: D/test(1076): create Activity options menu
06-12 15:50:08.392: D/test(1076): saving Activity state // <-- rotate happens here
06-12 15:50:08.446: D/test(1076): create fragment
06-12 15:50:08.446: D/test(1076): create activity
06-12 15:50:08.462: D/test(1076): create fragment view
06-12 15:50:08.470: D/test(1076): create Activity options menu

Ich verstehe das nicht und niemand scheint auf dieses Problem gestoßen zu sein. Das eigentliche Problem ist, dass mein SearchView den Status bei Konfigurationsänderungen (Telefondrehung) nicht wiederherstellen kann, da das onCreateOptionMenu zweimal aufgerufen wird. Beim ersten Mal scheint es den Status zu haben, beim zweiten Mal wird es gelöscht und zurückgesetzt. Ich kann nicht herausfinden, was ich falsch mache.

Danke im Voraus.

Antworten auf die Frage(3)

Ihre Antwort auf die Frage