webentwicklung-frage-antwort-db.com.de

Android-Symbolleiste Hinzufügen von Menüelementen für verschiedene Fragmente

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 gestartet und die Symbolleiste bleibt erhalten. Wie füge ich der Symbolleiste grundsätzlich Menüelemente hinzu, wie Suchen, Hinzufügen und Bearbeiten, wenn ich bestimmte Fragmente starte? Ich möchte sie nicht am Anfang des Programms haben, sondern dynamisch erstellen. Wie kann ich dann auf diese Schaltflächen klicken und andere Fragmente starten lassen? Ich möchte, dass es in einem Fragment so ist, dass die Bearbeitungsschaltfläche in der Symbolleiste eine bestimmte Funktion hat, verglichen mit der Bearbeitungsschaltfläche in einem anderen Fragment. Vielen Dank!

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"/>

Werkzeugleiste:

<?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"
/>
59
Joe Eigi
@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);
}
117
Gundu Bandgar

So erstellen Sie ein Menü dynamisch: http://www.101apps.co.za/index.php/articles/using-toolbars-in-your-apps.html

Bearbeitet:

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);
29
Allen Chan

Der beste Weg es zu tun:

1. Suchen Sie die Symbolleiste in Activity und legen Sie sie als supportActionBar fest.

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

2. Dann wird es ein Kinderspiel sein, Optionsmenüs für verschiedene Fragmente über dieselbe Aktivität zu behandeln . Führen Sie in jedem Fragment die folgenden Schritte aus, wie Sie möchten:

Im OnCreateView-Methodenaufruf

setHasOptionsMenu(true);

Und zuletzt, 

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

Um Menüelemente zu verwalten, klicken Sie auf "onOptionsItemSelected":

@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);
    }
}
14
Prateek Gupta

Überschreiben Sie die 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);
}
7
Ellie Zou

Ich habe diese Probleme richtig gelöst. Meine Lösung lautet wie folgt: 

@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);
}
4
Hai Rom

Ich hatte das gleiche Problem und wollte das Symbolleistenmenü entsprechend dem angezeigten Fragment ersetzen.

Das Problem, dem ich jetzt gegenüberstehe, ist, dass das Menü zum vorherigen hinzugefügt wird. 

Um nur das Menü für das Fragment anzuzeigen, schlage ich Folgendes 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);
}

Ich hoffe es hilft.

2
Matteo Gariglio

Nachfolgend finden Sie die Schritte zum Anzeigen verschiedener Menüoptionen mit verschiedenen Fragmenten.

Schritt 1: setHasOptionsMenu (true) aufrufen

override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
        setHasOptionsMenu(true)
        super.onViewCreated(view, savedInstanceState)

    }

Schritt 2: Pumpen Sie die Optionen für das Fragment-Optionsmenü auf.

override fun onCreateOptionsMenu(menu: Menu?, inflater: MenuInflater?) {
    // To clear previously added menu items
    menu?.clear()
    inflater?.inflate(R.menu.your_fragment_menu, menu)
    super.onCreateOptionsMenu(menu, inflater)
}
0
takharsh