1. ホーム
  2. android

[解決済み] AndroidでFragmentにオプションメニューを追加する方法

2022-03-22 05:16:13

質問

フラグメントのグループからオプションメニューに項目を追加しようとしています。

私は、新しい MenuFragment クラスを作成し、メニュー項目を含めたいフラグメント用にこれを拡張しました。以下はそのコードです。

Javaです。

public class MenuFragment extends Fragment {

    MenuItem fav;

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setHasOptionsMenu(true);
    }

    public void onCreateOptionsMenu(Menu menu, MenuInflater inflater) {
        fav = menu.add("add");
        fav.setIcon(R.drawable.btn_star_big_off);
    }
}

Kotlinです。

class MenuFragment : Fragment {

    lateinit var fav: MenuItem

    override fun onCreate(savedInstanceState: Bundle) {
        super.onCreate(savedInstanceState)
        setHasOptionsMenu(true)
    }

    override fun onCreateOptionsMenu(menu: Menu, inflater: MenuInflater) {
        fav = menu.add("add");
        fav.setIcon(R.drawable.btn_star_big_off);
    }
}

なぜか onCreateOptionsMenu が実行されないようです。

解決方法を教えてください。

スーパーメソッドを呼び出す。

Javaで

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setHasOptionsMenu(true);
    }

    @Override
    public void onCreateOptionsMenu(Menu menu, MenuInflater inflater) {
        // TODO Add your menu entries here
        super.onCreateOptionsMenu(menu, inflater);
    }

Kotlinです。

    override fun void onCreate(savedInstanceState: Bundle) {
        super.onCreate(savedInstanceState)
        setHasOptionsMenu(true)
    }

    override fun onCreateOptionsMenu(menu: Menu, inflater: MenuInflater) {
        // TODO Add your menu entries here
        super.onCreateOptionsMenu(menu, inflater)
    }

コードにログステートメントを入れて、メソッドが呼び出されていないか、メニューがあなたのコードによって修正されていないかどうかを確認します。

を呼び出しているかどうかも確認します。 setHasOptionsMenu(boolean)onCreate(Bundle) を使用して、フラグメントがオプションメニューの処理に参加することを通知します。