2017-02-28 2 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:それはないs原因

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のようなビューとして、それをキャストする方がいいR.id.action_sort);このコードはpopupMenu.inflate(R.menu.popup_menu);アプリケーションを実行すると、このエラーで強制終了されます。java.lang.RuntimeException:インデックス6の属性を解決できませんでした。今度は、推奨するコードで – user2308699

答えて

1

は、ビューとしてのMenuItemを渡しません。ます。public void showPopup(ビューV){ビューmenuItemView = findViewById(: はので、それは私はあなたが投稿ごとに私のコードを改訂し、これを追加この

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:属性の解決に失敗しましたこのエラーを修正する方法に関するアイデアはありますか? – user2308699

+0

@ user2308699あなたはlibをチェックするコードや、ここで同じ問題をチェックしたインポートとは関係ありません。http://stackoverflow.com/questions/30595187/android-xml-runtimeexception-failed-to-resolve-attribute- at-index-6 –

+0

ポップアップメニューを表示するコードをありがとう。それは私が持っていた問題を解決するための一歩でした。 – user2308699

関連する問題