Java 单击操作栏图标时弹出菜单

Java 单击操作栏图标时弹出菜单,java,android,android-actionbar,popupmenu,Java,Android,Android Actionbar,Popupmenu,我试图在点击操作栏图标时显示弹出菜单。 问题是,我得到了一个应用程序的强制关闭和弹出菜单不显示。我的代码有什么问题?谢谢你的帮助 @Override public boolean onCreateOptionsMenu(Menu menu) { // Inflate the menu; this adds items to the action bar if it is present. getMenuInflater().inflate(R.menu.m

我试图在点击操作栏图标时显示弹出菜单。 问题是,我得到了一个应用程序的强制关闭和弹出菜单不显示。我的代码有什么问题?谢谢你的帮助

@Override
    public boolean onCreateOptionsMenu(Menu menu) {
        // Inflate the menu; this adds items to the action bar if it is present.
        getMenuInflater().inflate(R.menu.menu_action, menu);

        return true;
    }


@Override
    public boolean onOptionsItemSelected(MenuItem item) {
        switch (item.getItemId()) {
        Toast.makeText(getApplicationContext(), "ItemSelected = " + item, Toast.LENGTH_SHORT).show();
             case R.id.action_sort:
             showPopup(item.getActionView());
     }

    return super.onOptionsItemSelected(item);
}


public void showPopup(View v) {
    PopupMenu popup = new PopupMenu(this, v);
    Toast.makeText(getApplicationContext(), "showPopup = " + popup, Toast.LENGTH_SHORT).show();
    MenuInflater inflater = popup.getMenuInflater();
    inflater.inflate(R.menu.popup_menu, popup.getMenu());
    popup.show();
    }
menu_action.xml

<menu xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools" tools:context=".FileManagerActivity">

    <item android:id="@+id/action_sort" android:title="@string/action_sort" android:icon="@drawable/ic_sort"
        android:showAsAction="always" />

    <item android:id="@+id/action_settings" android:title="@string/action_settings"
        app:showAsAction="never" />

    <item android:id="@+id/action_help" android:title="@string/action_help"
        app:showAsAction="never" />

</menu>

不要将MenuItem作为视图传递,因为它不是。 因此,最好将其转换为这样的视图

View menuItemView = findViewById(R.id.menu_overflow); // SAME ID AS MENU ID
PopupMenu popupMenu = new PopupMenu(this, menuItemView); 
popupMenu.inflate(R.menu.counters_overflow);
// And define click listener here.
popupMenu.show();

@Fazel我根据您的帖子修改了我的代码,并添加了以下代码:public void showPopup(View v){View menuItemView=findViewById(R.id.action\u sort);以及此代码:popupMenu.充气(R.menu.popup\u menu);当我运行应用程序时,它会强制关闭,并出现以下错误:java.lang.RuntimeException:无法使用您推荐的代码解析索引6处的属性。现在我收到了以下错误:java.lang.RuntimeException:无法解析索引6处的属性。有关如何更正此错误的任何想法?@user2308699与您检查的代码无关k lib或imports您已经使用过检查这个问题这里感谢代码显示一个弹出菜单。这是解决我遇到的问题的一步。
02-28 13:04:45.353  18838-18838/com.test.audio E/AndroidRuntime﹕ FATAL EXCEPTION: main
    Process: com.test.audio, PID: 18838
    java.lang.IllegalStateException: MenuPopupHelper cannot be used without an anchor
            at android.support.v7.internal.view.menu.MenuPopupHelper.show(MenuPopupHelper.java:126)
            at android.support.v7.widget.PopupMenu.show(PopupMenu.java:193)
            at com.test.audio.TouchActivity.showPopup(TouchActivity.java:5340)
            at com.test.audio.TouchActivity.onOptionsItemSelected(TouchActivity.java:5270)
            at android.app.Activity.onMenuItemSelected(Activity.java:2885)
            at com.android.internal.policy.impl.PhoneWindow.onMenuItemSelected(PhoneWindow.java:1133)
            at com.android.internal.view.menu.MenuBuilder.dispatchMenuItemSelected(MenuBuilder.java:761)
            at com.android.internal.view.menu.MenuItemImpl.invoke(MenuItemImpl.java:152)
            at com.android.internal.view.menu.MenuBuilder.performItemAction(MenuBuilder.java:904)
            at com.android.internal.view.menu.MenuBuilder.performItemAction(MenuBuilder.java:894)
            at android.widget.ActionMenuView.invokeItem(ActionMenuView.java:587)
            at com.android.internal.view.menu.ActionMenuItemView.onClick(ActionMenuItemView.java:141)
            at android.view.View.performClick(View.java:4780)
            at android.view.View$PerformClick.run(View.java:19866)
            at android.os.Handler.handleCallback(Handler.java:739)
            at android.os.Handler.dispatchMessage(Handler.java:95)
            at android.os.Looper.loop(Looper.java:135)
            at android.app.ActivityThread.main(ActivityThread.java:5254)
            at java.lang.reflect.Method.invoke(Native Method)
            at java.lang.reflect.Method.invoke(Method.java:372)
            at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:903)
            at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:698)
View menuItemView = findViewById(R.id.menu_overflow); // SAME ID AS MENU ID
PopupMenu popupMenu = new PopupMenu(this, menuItemView); 
popupMenu.inflate(R.menu.counters_overflow);
// And define click listener here.
popupMenu.show();