365連休

にわかのandroidとかの開発メモ。

Android Studio 3.6 Fragment用のオプションメニューを追加しようと思ったら、onCreateOptionsMenuが呼ばれない。onPrepareOptionsMenuも呼ばれない。

Activityでオプションメニューを生成し、Fragmentからもオプションメニューを追加したいと思った時、

 

Fragment#onCreateOptionsMenu

または

Fragment#onPrepareOptionsMenu

をオーバーライドするが、これだけでは不十分。

 

Fragment#onCreateView内でsetHasOptionsMenu(true)をコールする必要がある。

 

//フラグメント内
    @Override
    public View onCreateView(@NonNull LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
    
        :
        
        //オプションメニュー利用フラグを立てる
        setHasOptionsMenu(true);
        
        :
        
        return view;

    }
    
    @Override
    public void onCreateOptionsMenu(@NonNull Menu menu, @NonNull MenuInflater inflater) {
        super.onCreateOptionsMenu(menu, inflater);
        
        //menu.add( do something );
    }

    @Override
    public void onPrepareOptionsMenu(@NonNull Menu menu) {
        super.onPrepareOptionsMenu(menu);
        
        //フラグメントからmenu.clear()しないこと

        //menu.add( do something );
    }

    @Override
    public boolean onOptionsItemSelected(@NonNull MenuItem item) {
        //switch (String.valueOf(item.getTitle())){
        switch (item.getItemId()){
            //case ???: do something
            default: return super.onOptionsItemSelected(item);
        }
    }