it-swarm.com.de

AppCompat v7 Toolbar onOptionsItemSelected wird nicht aufgerufen

Ich habe von der ursprünglichen ActionBar zur AppCompat-Symbolleiste und setSupportActionBar (Symbolleiste) gewechselt. Wenn ich getSupportActionBar () und setDisplayHomeAsUpEnabled (true) für den Zurückpfeil verwende, ruft der Klick nie die onOptionsItemSelected-Methode oder eine andere Listener-Methode auf.

Muss ich dafür einen speziellen Listener implementieren? Bevor alles gut funktioniert hat.

BEARBEITEN: Initialisieren Sie die ActionBar:

mToolbar = (Toolbar) findViewById(R.id.toolbar);
setSupportActionBar(mToolbar);
mActionBar = getSupportActionBar();
mActionBar.setHomeButtonEnabled(true);

und nachdem ich den Inhalt durch ein Fragment ersetzt habe, mache ich folgendes:

mDrawerLayout.setDrawerLockMode(DrawerLayout.LOCK_MODE_LOCKED_CLOSED);
mDrawerToggle.setDrawerIndicatorEnabled(false);
mActionBar.setDisplayHomeAsUpEnabled(true);
41
Informatic0re

Ich weiß, dass diese Frage beantwortet wurde, aber nach 2 Tagen voller Frustration habe ich die wahre Ursache des Problems gefunden.

Schauen Sie sich die ActionBarDrawerToggle-Dokumentation an: https://developer.Android.com/reference/Android/support/v7/app/ActionBarDrawerToggle.html

Beachten Sie die beiden Konstruktoren dort. Mein Fehler war, dass ich den zweiten Konstruktor verwendete, der eine Symbolleiste als Parameter verwendete. Es hat so lange gedauert, bis ich die letzte Zeile in der Konstruktordokumentation bemerkt habe: " Bitte verwenden Sie ActionBarDrawerToggle (Activity, DrawerLayout, int, int), wenn Sie die Symbolleiste als Ihre ActionBar festlegen Aktivität. "

Nach Verwendung des ersten Konstruktors wurde onOptionsItemSelected () ohne Probleme aufgerufen.

Vergessen Sie nicht, die ActionBarDrawerToggle.onConfigurationChanged () und onOptionsItemSelected () aus Ihrer Aktivität aufzurufen, wie im letzten Teil hier beschrieben : http://developer.Android.com/training/implementing-navigation/nav-drawer.html

116
Andrei Lupsa

Ich musste einen OnClickListener für den DrawerToggle implementieren: 

mDrawerToggle.setToolbarNavigationClickListener(new View.OnClickListener() {
    @Override
    public void onClick(View v) {
        popStackIfNeeded();
        mDrawerLayout.setDrawerLockMode(DrawerLayout.LOCK_MODE_UNLOCKED);
        mActionBar.setDisplayHomeAsUpEnabled(false);
        mDrawerToggle.setDrawerIndicatorEnabled(true);
    }
});

das hat mein Problem behoben.

28
Informatic0re

Ich hatte mehrere Probleme mit der setSupportActionBar () -Methode. Außerdem werden bestimmte Farbschemata ignoriert, so dass Sie den Pfeil für das Rückpfeil oder das Überlaufsymbol nicht formatieren können (Sie können sich nicht erinnern, welches). Ich habe die ActionBar-Integration einfach aufgegeben und die Toolbar nativ verwendet. Als Alternative können Sie dies wie folgt tun.

Nehmen Sie einfach die Symbolleiste auf, wie Sie es normalerweise tun würden, und nehmen Sie an, dass in Ihrem Layout eine ID von @ + id/toolbar verwendet wird.

Dann im Code:

_toolbar = (Toolbar) findViewById(R.id.toolbar);
_toolbar.setNavigationOnClickListener(new View.OnClickListener() {
    @Override
    public void onClick(View v) {
        handleNavButtonPress();
    }
});
_toolbar.setOnMenuItemClickListener(_menuItemClickListener);
_toolbar.inflateMenu(R.menu.message_list_menu);
Menu menu = _toolbar.getMenu();

In diesem Fall kann _menuItemClickListener fast buchstäblich Ihre aktuelle onOptionsItemSelected () - Methode umbenannt werden. Sie müssen nur nicht mehr prüfen, ob das Menü null ist.

Um Elemente aus dem Menü zu entfernen, rufen Sie einfach menu-> clear () auf. Also lösche ich in meiner onPause die Menüs und onResume, blase sie in meine Fragmente auf und jedes Fragment legt den Click-Handler in onResume fest. Sie müssen immer aufräumen, da Android dies bei diesem Ansatz nicht für Sie erledigt, und die Symbolleiste fügt bei jedem Aufpumpen weitere Menüs hinzu.

Eine letzte Anmerkung: Damit alles funktioniert, müssen Sie die Aktionsleiste vollständig deaktivieren und aus dem Stil entfernen.

4
reactive-core

Wenn Sie alles ausprobiert haben und es nicht funktioniert, können Sie Ihren eigenen Klicklistener wie folgt implementieren:

myNavList.setOnItemClickListener(new Android.widget.AdapterView.OnItemClickListener() {
    @Override
    public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
        String item = myNavList.getItemAtPosition(position).toString();
        Toast.makeText(this, "You selected " + item, Toast.LENGTH_SHORT).show();
    }
});
0
Prof

Eine Sache, die nicht erwähnt wurde:
Wenn Sie das Optionsmenü dynamisch in onCreateOptionsMenu erstellen und null dort zurückgeben, funktioniert die Aufwärts-Schaltfläche in der Aktionsleiste nicht.
Funktioniert gut, wenn Sie den Parameter Menu zurückgeben, ohne etwas hinzuzufügen. 

Getestet auf Emulator-API 19

0
Max Izrin

In meinem Fall war setHasOptionsMenu(true); für onCreateView nicht aktiviert. Hoffe das hilft jemandem.

0
Coder Absolute