8

でいくつかのフラグメントメニュー項目を設定する際に問題が発生し、ActionBarそれを解決する方法を見つけましたが、なぜそれが機能したのかわかりません。

onCreateOptionsMenuメソッドのmenuxmlファイルからメニュー項目を膨らませた直後に、メニュー項目の表示を変更したかったのです。コードは正常に機能しているようですが、目に見える効果はありません。onCreateOptionsMenuメソッドでメニューを膨らませながら、メソッドでの表示を変更する問題を解決しましたonPrepareOptionsMenu

私が知りたいのは、での可視性の変更がonCreateOptionsMenu機能しない理由です。

onPrepareOptionsMenuできないことで何ができるのonCreateOptionsMenu

ここで従うべきパターンはありますか?

ありがとう!

念のため、関連するコードを次に示します。

public class MyFragment extends Fragment {

    @Override
    public void onCreateOptionsMenu(Menu menu, MenuInflater inflater) {
        super.onCreateOptionsMenu(menu, inflater);
        inflater.inflate(R.menu.my_menu, menu);

        // This does not work, compiles and runs fine, but has no visible effect
        MenuItem someMenuItem = menu.findItem(R.id.some_menu_item);
        someMenuItem.setVisible(false);
    }

    @Override
    public void onPrepareOptionsMenu(Menu menu) {
        super.onPrepareOptionsMenu(menu);

        // This does work
        MenuItem someMenuItem = menu.findItem(R.id.some_menu_item);
        someMenuItem.setVisible(false);
    }
}
4

4 に答える 4

6

super.onCreateOptionsMenu(menu, inflater);メニューを作成する前ではなく、作成した後で呼び出す必要があります。これにより、メニューが階層内で上に移動し、他のフラグメントが送信されたり、アクティビティがアイテム自体を追加したりする場合があります。

メニューの表示と管理はアクティビティが担当するため、アクティビティに送信された後で表示を変更しても、何も起こりません。

これで、呼び出すsuper.onPrepareOptionsMenu(menu);とメニューが「準備」されますが、で行った変更がonCreateOptionsMenu考慮されます。

于 2014-09-17T15:08:25.487 に答える
0

メニューを表示するには、コードがtrueを返す必要がある可能性があります。つまり、 とreturn true;の両方にステートメントを配置する必要がonCreateOptionsMenu()ありonPrepareOptionsMenu()ます。

お役に立てれば。

于 2012-08-16T14:15:41.127 に答える
0

onPrepareOptionsMenuを使用して、メニューのどの項目をアクティブにするか、アクティビティの現在の状態に応じてどの項目をグレー表示/削除するかを更新します。メニュー項目のsetVisibleメソッドを使用して、現在メニューに表示されるかどうかを制御します。

于 2013-11-30T23:23:55.163 に答える
-2

これは私のために働く

public class ContentFragment extends android.support.v4.app.Fragment {
@Nullable
@Override
public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
    View v = inflater.inflate(R.layout.content_frame,container,false);
    setHasOptionsMenu(true);
    return v;
}

@Override
public void onCreateOptionsMenu(Menu menu, MenuInflater inflater) {
    inflater.inflate(R.menu.note_menu,menu);
    super.onCreateOptionsMenu(menu, inflater);
}
}

それを試してみてください

于 2016-06-20T09:48:27.317 に答える