2016-12-28 2 views
0

In meinem Fragment möchte ich nur meine Menu/MenuItems in meiner Symbolleiste im Querformat anzeigen. Wenn ich die Ausrichtung ändere, bemerke ich, dass onCreateOptionsMenu und onPrepareOptionsMenu nicht aufgerufen wird.onCreateOptionsMenu und onPrepareOptionsMenu bei Orientierungsänderung nicht aufgerufen

Mit anderen Worten, meine Landschaft Layout mit meinen Menüpunkten funktioniert nur, wenn ich im Landschaftsmodus starten , aber nicht, wenn ich versuche zu Änderung in dem Querformat (stürzt ab, wenn von Hoch- auf Querformat zu ändern).

public class MyFragment extends Fragment 
{ 
    private int orientation; 

    @Override 
    public void onCreate(Bundle savedInstanceState) 
    { 
     orientation = getResources().getConfiguration().orientation; 
     if (orientation == Configuration.ORIENTATION_LANDSCAPE) 
      setHasOptionsMenu(true); 

     super.onCreate(savedInstanceState); 
    } 

    @Override 
    public void onCreateOptionsMenu(Menu menu, MenuInflater inflater) 
    { 
     if (orientation == Configuration.ORIENTATION_LANDSCAPE) 
      inflater.inflate(R.menu.my_menu, menu); 

     super.onCreateOptionsMenu(menu, inflater); 
    } 

    @Override 
    public void onPrepareOptionsMenu(Menu menu) 
    { 
     initializeLandscapeMenuViews(menu); 
     super.onPrepareOptionsMenu(menu); 
    } 

    @Override 
    public void onViewCreated(View view, Bundle savedInstanceState) 
    { 
     super.onViewCreated(view, savedInstanceState);   
     if (orientation == Configuration.ORIENTATION_PORTRAIT) 
      initializePortraitMenuViews(view); 
    } 

    @Nullable 
    @Override 
    public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) 
    { 
     return inflater.inflate(R.layout.my_layout, container, false); 
    } 

// other code not shown 
} 

Der Absturz tritt auf, wenn ich versuche, die Ansichten zugreifen, die ich in initializeLandscapeMenuViews() initialisiert werden, da onPrepareOptionsMenu() nie genannt wird.

überprüfte ich die Reihenfolge der Anrufe Verwendung des Debuggers:

Beginnend im Landschaftsmodus

  1. onCreate
  2. onViewCreated
  3. onCreateOptionsMenu
  4. onPrepareOptionsMenu

dann, Orientierungsänderung zu Portrait

  1. onCreate
  2. onViewCreated

dann, Orientierungsänderung zurück zu Landschaft

  1. onCreate
  2. onViewCreated

onCreateOptionsMenu und onPrepareOptionsMenu nicht

genannt

Was bin ich? (Jede Hilfe wird geschätzt).

Antwort

0

Grundsätzlich sehe ich kein Problem mit Ihrem Ansatz. haben Sie dennoch versucht, invalidateOptionsMenu() aufzurufen? Es soll dem Betriebssystem mitteilen, dass Sie Ihre Menüs neu zeichnen möchten, indem Sie onCreateOptionsMenu() aufrufen.

+0

Hallo @Idanatz, ich habe es tatsächlich versucht, aber diese Rückrufe werden nicht aufgerufen :( – Vinnie

-1

Edit: Ich dachte TS arbeitete mit Aktivitäten, aber er verwendet Fragmente. Es tut uns leid. Wenn Sie mit der Aktivität arbeiten: onCreateOptionsMenu und onPrepareOptionsMenu haben einen booleschen Rückgabewert. Sie müssen also einen booleschen Wert (statt void) zurückgeben. In Ihrer derzeitigen Vorgehensweise überschreiben Sie die Funktionen deshalb nicht. Deshalb scheint es, als ob die Funktionen niemals aufgerufen werden. Weitere Informationen finden Sie unter API

+0

Bitte lesen Sie die Frage sorgfältig. Ich erweitere ein 'Fragment', nicht eine' Aktivität'. – Vinnie

+0

Sie haben Recht, ich habe diesen Teil vermisst. Es tut uns leid. – Richh94

Verwandte Themen