2017-02-28 68 views
1

我試圖在點擊操作欄圖標上顯示彈出式菜單。 問題是我得到應用程序的強制關閉,並且彈出菜單不顯示。我的代碼有什麼問題?感謝您的幫助。單擊操作欄上的彈出菜單圖標

@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> 

popup_menu.xml

<?xml version="1.0" encoding="utf-8"?> 
<menu xmlns:android="http://schemas.android.com/apk/res/android"> 
    <item 
     android:id="@+id/opt1" 
     android:icon="@drawable/ic_sort" 
     android:title="Change Picture" /> 
    <item 
     android:id="@+id/opt2" 
     android:icon="@drawable/ic_fast_forward" 
     android:title="Change Password" /> 

    <item 
     android:id="@+id/opt3" 
     android:icon="@drawable/ic_fast_rewind" 
     android:title="Sign Out" /> 
</menu> 

的logcat:

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) 
+0

@Fazel我修改我的代碼,每經發布,並添加這樣的:公共無效showPopup(視圖v){查看menuItemView = findViewById( R.id.action_sort);和這個代碼:popupMenu.inflate(R.menu.popup_menu);當我運行該應用程序時,它強制關閉這個錯誤:java.lang.RuntimeException:無法解析索引6 – user2308699

回答

1

不通過菜單項的查看原因它不是。 所以。最好投它作爲視圖這樣

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(); 

Source

+0

的屬性與你現在推薦的代碼我得到這個錯誤:java.lang.RuntimeException:無法解析屬性在索引6.關於如何糾正這個錯誤的任何想法? – user2308699

+0

@ user2308699它與您檢查lib或您已經使用的導入代碼沒有任何關係檢查此處同樣的問題http://stackoverflow.com/questions/30595187/android-xml-runtimeexception-failed-to-resolve-attribute- at-index-6 –

+0

感謝代碼顯示PopupMenu。這是解決我遇到的問題的一步。 – user2308699