2015-06-09 10 views
40

Ich habe eine Symbolleiste sowie eine Navigationsleiste. Wenn ich meine App starte, werden die Symbolleiste und die Navigationsleiste erstellt. Wenn ich auf Elemente in der Navigationsleiste klicke, werden neue Fragmente erstellt und dieselbe Symbolleiste beibehalten. Wie füge ich der Symbolleiste im Grunde Menüelemente hinzu, z. B. Suchen, Hinzufügen, Bearbeiten in meiner Symbolleiste, wenn ich bestimmte Fragmente starte. Ich will sie nicht am Anfang des Programms, sondern dynamisch erstellen. Wie könnte ich auch auf diese Schaltflächen klicken und sie andere Fragmente starten lassen? Ich will es so in einem Fragment, die Bearbeitungsschaltfläche in der Symbolleiste macht eine bestimmte Sache im Vergleich zu der Bearbeitungsschaltfläche in einem anderen Fragment. Vielen Dank!Android Toolbar Menüelemente für verschiedene Fragmente hinzufügen

Menu_toolbar:

<?xml version="1.0" encoding="utf-8"?> 
<menu 
xmlns:android="http://schemas.android.com/apk/res/android" 
xmlns:app="http://schemas.android.com/apk/res-auto"> 

<item android:id="@+id/edit" 
    android:orderInCategory="1" 
    android:title="Edit" 
    app:showAsAction="always" 
    android:icon="@drawable/pencil_icon"/> 
<item android:id="@+id/add" 
    android:orderInCategory="1" 
    android:title="Add" 
    app:showAsAction="always" 
    android:icon="@drawable/plus_icon"/> 

Toolbar:

<?xml version="1.0" encoding="utf-8"?> 
<android.support.v7.widget.Toolbar 
xmlns:android="http://schemas.android.com/apk/res/android" 
android:id="@+id/toolbar" 
android:layout_width="match_parent" 
android:layout_height="55dp" 
android:background="#10a1ff" 
android:title="Home" 
/> 

Antwort

6

Aufschalten onCreateOptionsMenu Methode in jedem Fragment.

@Override 
public void onCreateOptionsMenu(Menu menu, MenuInflater inflater) { 
    inflater.inflate(R.menu.your_menu_xml, menu); 
    super.onCreateOptionsMenu(menu, inflater); 
} 
+0

@JoeEigi Warum möchten Sie eine andere Symbolleiste?Sie können verschiedene Titel und Menüs einstellen. –

+0

@JoeEigi Ja, Sie können ein benutzerdefiniertes Menü haben, indem Sie das benutzerdefinierte Menü xml aufblasen. Call 'setTitle()' kann Titel hinzufügen. –

+0

@JoeEigi Scheint, du hast den falschen Kontext, sieh dir das an: http://stackoverflow.com/questions/26998455/how-to-get-toolbar-from-fragment –

21

Dies ist, wie Menü erstellt dynamisch: http://www.101apps.co.za/index.php/articles/using-toolbars-in-your-apps.html

Edited:

Toolbar actionBarToolBar = (Toolbar) findViewById(R.id.my_toobar); 
setSupportActionBar(actionBarToolBar); 
actionBarToolBar.setNavigationIcon(R.drawable.icon); 
actionBarToolBar.setNavigationContextDescription(getResources().getString(R.string.desc); 
actionBarToolBar.setLogo(R.drawable.other_icon); 
actionBarToolBar.setLogoDescription(getResources().getString(R.string.other_desc); 
actionBarToolBar.inflateMenu(R.menu.fragment_menu); 
+0

Die beste Antwort zum Erstellen von Aktionsleistenmenüs und usw. in der Symbolleiste. – user2681579

+1

Verwenden Sie 'actionBarToolbar.setOnMenuItemClickListener()', um Menüelementaktionen zu behandeln. 'onOptionsItemSelected()' wird in dieser Situation nicht aufgerufen. –

82
@Override 
public View onCreateView(LayoutInflater inflater, ViewGroup parent, Bundle savedInstanceState) 
{ 
    View v = inflater.inflate(R.layout.library_fragment, parent, false); 
    setHasOptionsMenu(true); 
    return v; 
} 


@Override 
public void onCreateOptionsMenu(Menu menu, MenuInflater inflater) { 
    inflater.inflate(R.menu.your_menu_xml, menu); 
    super.onCreateOptionsMenu(menu, inflater); 
} 
+10

Dies ist die richtige Antwort, da der Aufruf von setHasOptionsMenu (true) für die onCreateOptionsMenu-Methode erforderlich ist, die im Fragment aufgerufen wird. –

+0

Wohin mit diesem Code? Kann ich MainActivity hinzufügen? – Faisal

+2

Sie können diesen Code nicht in Aktivität einfügen, Sie fügen diesen Code hinzu, wo Sie Menüelement in einem bestimmten Fragment anzeigen. Code fügt Fragment hinzu. –

3

ich diese Fragen richtig gelöst. Meine Lösung ist, wie folgender Code:

@Override 
public View onCreateView(LayoutInflater inflater, ViewGroup container, 
         Bundle savedInstanceState) { 
    // Inflate the layout for this fragment 
    mRootView = inflater.inflate(R.layout.fragment_order_history, container, false); 
    //getActivity().invalidateOptionsMenu(); 


    setHasOptionsMenu(true); 

    return mRootView; 
} 
@Override 
public void onCreateOptionsMenu(Menu menu, MenuInflater inflater) { 
    inflater.inflate(R.menu.main, menu); 
    super.onCreateOptionsMenu(menu, inflater); 
} 
+0

Ja, ich habe das Menü korrekt angezeigt. Aber wie dieses Menü auf Fragment schließen, ich meine, wenn wir zu einem anderen Fragment wechseln, z.B. von a -> b, das Menü eines in der Werkzeugleiste noch sichtbaren Fragments von b. –

+0

Verwenden Sie SetHasOptionsMenu (false) in onCreateView des Fragments b. –

+0

Dies sollte die richtige Antwort lol sein. Gut gemacht mein Freund –

0

Ich hatte das gleiche Problem, und ich wollte das Toolbar-Menü entsprechend das Fragment angezeigt ersetzen.

Das Problem, mit dem ich jetzt konfrontiert bin, ist, dass das Menü zu dem vorherigen hinzugefügt wird.

Um nur das Menü für das Fragment zu zeigen, schlage ich vor:

@Override 
public void onCreateOptionsMenu(Menu menu, MenuInflater inflater) { 
    menu.clear(); //Empty the old menu 
    inflater.inflate(R.menu.menu_fragment1, menu); 
    super.onCreateOptionsMenu(menu, inflater); 
} 

Hoffe, es wird helfen.

2

Der beste Weg, es zu tun:

1. Symbolleiste Suchen in Aktivität und legen Sie es als supportActionBar.

Toolbar actionBarToolBar = (Toolbar) findViewById(R.id.my_toobar); 
setSupportActionBar(actionBarToolBar); 

2. Dann wird es ein Stück Kuchen zu Optionsmenü für verschiedene Fragmente über eine gleiche Aktivität zu behandeln. in jedem Fragment folgende Dinge tun, wie Sie wollen:

In OnCreateView Methodenaufruf

setHasOptionsMenu(true); 

Und schließlich

@Override 
public void onCreateOptionsMenu(Menu menu, MenuInflater inflater) { 
    inflater.inflate(R.menu.main, menu); 
    super.onCreateOptionsMenu(menu, inflater); 
} 

und Menüpunkte verwalten klicken, wir onOptionsItemSelected haben:

@Override 
public boolean onOptionsItemSelected(MenuItem item) { 
    switch (item.getItemId()) { 
     case R.id.action_search : 
      Log.i("item id ", item.getItemId() + ""); 
     default: 
      return super.onOptionsItemSelected(item); 
    } 
} 
Verwandte Themen