Frage Android-Aktionsleisten-Menüelement mit actionLayout funktioniert nicht richtig


Hallo Ich entwickle eine Android-Anwendung. In meiner Anwendung verwende ich Sherlock-Action. Ich habe einige Menüpunkte in Action-Bar wie folgt definiert

<menu xmlns:android="http://schemas.android.com/apk/res/android">
    <item
        android:id="@+id/card_menu"
        android:actionLayout="@layout/action_button"
        android:showAsAction="always"
        android:title="cards">
        <menu>
            <item
                android:id="@+id/C1"
                android:title="C1"/>
            <item
                android:id="@+id/C2"
                android:title="c2"/>
            <item
                android:id="@+id/C3"
                android:title="C3"/>
        </menu>
    </item>
    <item
        android:id="@+id/notification"
        android:actionLayout="@layout/notification_icon"
        android:icon="@drawable/notification"
        android:showAsAction="always"
        android:title="Notifications"/>

    <item
        android:id="@+id/filter"
        android:icon="@drawable/filter"
        android:showAsAction="always"
        android:title="Filter"/>
</menu>

und Meine action_button sieht folgendermaßen aus:

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content">

    <ImageView
        android:id="@+id/menu_img"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:src="@drawable/spinner_ab_focused_maroon"/>
    <TextView
        android:id="@+id/menu_text"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_toRightOf="@+id/imageView0"
        android:text="C1"/>
</RelativeLayout>

Jetzt wird alles angezeigt, aber mein Problem ist, dass wenn ich auf klicke card_menu item wo ich Untermenüs definiere und auch Aktionslayout definiere. Es zeigt diese Untermenüs nicht an. Meine anderen Menüpunkte funktionieren ordnungsgemäß. Nur wenn ich ein Aktionslayout für mein Element definiere, das Untermenüs enthält, die ich nicht im Untermenü anzeigen kann. Wenn ich das Aktionslayout entferne, funktioniert es gut.

Ich weiß, wenn wir ein Aktionslayout für ein Element definieren, müssen wir den Klicklistener manuell handhaben. Ich habe das auf folgende Weise getan

final MenuItem item = menu.findItem(R.id.card_menu);
        item.getActionView().setOnClickListener(new OnClickListener() {
            @Override
            public void onClick(View v) {
                onOptionsItemSelected(item);
                Toast.makeText(getActivity(), "click on menu", Toast.LENGTH_SHORT).show();
            }
        });

Ich bin in der Lage, das Ereignis für dieses Element anzuklicken, aber Dropdown-Untermenüelemente nicht anzuzeigen.

Wie löse ich dieses Problem?


22
2018-02-16 08:49


Ursprung


Antworten:


Probieren Sie diesen Code in Ihrer Aktivität aus.
Stellen Sie sicher, dass Sie richtig eingestellt sind

R.menu.Menükennung

R.id.menuitemidentifier

@Override
    public boolean onCreateOptionsMenu(Menu menu) {
        MenuInflater inflater = getMenuInflater();
        inflater.inflate(R.menu.actionbarhelpmenu, menu);
        final Menu m = menu;
        final MenuItem item = menu.findItem(R.id.ActionConnection);
        item.getActionView().setOnClickListener(new OnClickListener() {

            @Override
            public void onClick(View v) {   
                m.performIdentifierAction(item.getItemId(), 0);
            }
        });
        return true;
    }

48
2018-02-27 22:59



Akzeptierte Antwort funktionierte nicht für mich. Mein Untermenü verhielt sich auf verschiedenen Geräten anders. Bei Motorola Moto X war es so: enter image description here

Sie können sehen, dass das Untermenü in der falschen Position ist (Ich habe auf das Blasensymbol auf der rechten Seite der ActionBar geklickt).

Am Ende habe ich eine andere Lösung gefunden: benutze stattdessen PopupMenu. Code sieht so aus:

@Override
public void onCreateOptionsMenu(final Menu menu, MenuInflater inflater) {
    super.onCreateOptionsMenu(menu, inflater);
    inflater.inflate(R.menu.menu_fragment_chat, menu);
    final MenuItem item = menu.findItem(R.id.menu_item_actionbar_avatar);
    MenuItemCompat.getActionView(item).setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            showProfileMenuPopup(v);
        }
    });
}

public void showProfileMenuPopup(View v) {
    PopupMenu popup = new PopupMenu(getActivity(), v);
    MenuInflater inflater = popup.getMenuInflater();
    inflater.inflate(R.menu.menu_avatar_actions, popup.getMenu());
    popup.setOnMenuItemClickListener(new PopupMenu.OnMenuItemClickListener() {
        @Override
        public boolean onMenuItemClick(MenuItem menuItem) {
            return false;
        }
    });
    popup.show();
}

Und es hat funktioniert :)


6
2018-04-03 11:20



Voll funktionsfähiger Code

 <item
    android:title="search"
    android:id="@+id/mSearch"
    app:actionLayout="@layout/my_custom_menu_item"
    android:orderInCategory="100"
    app:showAsAction="always"/>

Code:

@Override
public boolean onCreateOptionsMenu(final Menu menu) {
    getMenuInflater().inflate(R.menu.menu,menu); MenuItem item = menu.findItem(R.id.mSearch);
    ImageView iv= (ImageView) item.getActionView().findViewById(R.id.search_1);
    iv.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View view) {
            Toast.makeText(context, "clicked", Toast.LENGTH_SHORT).show();
        }
    });
    return true;
}

1
2018-02-17 13:23



Siehe die Antworten

Wenn im Aktionslayout eine Schaltfläche vorhanden ist, Um den Rückruf von einem Menüpunkt zu erhalten, vergessen Sie nicht, die Taste zu drücken

android:clickable="false"

0
2018-01-03 03:05