0

PSは、投票するか重複としてマークする前に問題を確認してください。メニュー項目を非表示にするために可能なすべてのアプローチを試みましたが、どれも機能していないようです。

私の options_menu.xml は次のとおりです

<?xml version="1.0" encoding="utf-8"?>
<menu xmlns:android="http://schemas.android.com/apk/res/android">
<item android:id="@+id/menu_search"
      android:title="@string/search_title"
      android:icon="@drawable/ic_action_search"
      android:showAsAction="collapseActionView|ifRoom"
      android:actionViewClass="android.widget.SearchView" />
<item
    android:id="@+id/menu_share"
    android:icon="@android:drawable/ic_menu_share"
    android:showAsAction="always"
    android:title="Share"/>
</menu>

menu_shareこのコードを使用して非表示にする ParentFragment にこのメニューを表示しています

 @Override
public void onCreateOptionsMenu(Menu menu, MenuInflater inflater) {

     inflater.inflate(R.menu.options_menu, menu);
    menu.findItem(R.id.menu_share).setVisible(false);
}

これにより、Shareオプションが正常に非表示になります。このフラグメントは、新しいフラグメント、つまり子フラグメントを開きます。

Searchこの子 Fragment では、アイテムを非表示にしてオプションのみを表示したいと考えていShareます。しかし、同じコードを使用しても、ここでは役に立ちません。

   @Override
public void  onCreateOptionsMenu(Menu menu, MenuInflater inflater) {
    inflater.inflate(R.menu.options_menu, menu);
    menu.findItem(R.id.menu_search).setVisible(false);

}

入れてみgetActivity().invalidateOptionsMenu();ましたが、効果はありません。アクションバーには常に両方のメニュー項目が表示されます。Pls は、これを引き起こしている原因を突き止めるのを手伝ってくれます。

エラーログ

E/AndroidRuntime﹕ FATAL EXCEPTION: main
Process: info.androidhive.slidingmenu, PID: 27321
java.lang.NullPointerException
        at info.androidhive.slidingmenu.HomeFragment.onPrepareOptionsMenu(HomeFragment.java:476)
        at android.app.Fragment.performPrepareOptionsMenu(Fragment.java:1794)
        at android.app.FragmentManagerImpl.dispatchPrepareOptionsMenu(FragmentManager.java:1964)
        at android.app.Activity.onPreparePanel(Activity.java:2665)
        at com.android.internal.policy.impl.PhoneWindow.preparePanel(PhoneWindow.java:540)
        at com.android.internal.policy.impl.PhoneWindow.doInvalidatePanelMenu(PhoneWindow.java:881)
        at com.android.internal.policy.impl.PhoneWindow$1.run(PhoneWindow.java:297)
        at android.os.Handler.handleCallback(Handler.java:733)
        at android.os.Handler.dispatchMessage(Handler.java:95)
        at android.os.Looper.loop(Looper.java:146)
        at android.app.ActivityThread.main(ActivityThread.java:5593)
        at java.lang.reflect.Method.invokeNative(Native Method)
        at java.lang.reflect.Method.invoke(Method.java:515)
        at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1283)
        at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1099)
        at dalvik.system.NativeStart.main(Native Method)
4

3 に答える 3

7

onCreateOptionsMenu メソッドでメニューを非表示にする代わりに、フラグメント/子フラグメントが含まれる親アクティビティの onPrepareOptionsMenu で非表示にすることができます。そのフラグメントが表示されているかどうかを確認し(各フラグメントにタグ名を割り当てることで実行できます)、そのフラグメントにいる場合はメニューを非表示にするコードを記述します。これがお役に立てば幸いです。

onPrepareOptionsMenu メソッドで次のようなことができます。

フラグメント frag = getSupportFragmentManager().findFragmentByTag("YOURFRAGMENT");

    if (frag != null && frag.isVisible()) {
      menu.findItem(R.id.menu_search).setVisible(false);
    } else {
        menu.findItem(R.id.menu_share).setVisible(false);
    }
        return super.onPrepareOptionsMenu(menu);
于 2015-04-28T07:53:57.803 に答える