16

私は Fragments を使用しており、ネストされた Fragment に切り替えると、public void onCreateOptionsMenu(Menu menu, MenuInflater inflater)そのネストされた Fragment に到達するとメニューが膨張する回数が増えます。どうすればこれを回避できますか? メソッドを使用して Fragment のコンストラクターも実装します。

setRetainInstance(true);
setHasOptionsMenu(true);

単純なソリューションを次のように実装しようとしたとき:

 @Override
 public void onCreateOptionsMenu(Menu menu, MenuInflater inflater) {
     // TODO Add your menu entries here
   if(!isInflated)
         {
         inflater.inflate(R.menu.contacts_archive_menu, menu);
         isInflated = true;
         }
         super.onCreateOptionsMenu(menu, inflater);

 }

しかし、画面の回転後にメニューが膨張しませんでした。

4

3 に答える 3

40

イオンフレーションする前にメニューをクリアするだけで解決しました:

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

     }
于 2013-09-13T13:14:33.237 に答える
8

menuアイテムの数を確認するだけです。つまりmenu.size()==0menuアイテムが存在layout menuしない場合は、で膨らませます。それ以外の場合は、まったく膨らませません。

 @Override
 public void   onCreateOptionsMenu(Menu menu, MenuInflater inflater) {
      if (menu.size() == 0)
      inflater.inflate(R.menu.call_menu, menu);
      super.onCreateOptionsMenu(menu, inflater);

 }
于 2014-01-31T07:13:17.720 に答える
-1

交換前に使用。

 fragment = new EditMyProfile();
 FragmentTransaction fragmentTransactionEditProfile =getSupportFragmentManager().beginTransaction();
 getSupportFragmentManager().popBackStack(null, FragmentManager.POP_BACK_STACK_INCLUSIVE);
 fragmentTransactionEditProfile.replace(R.id.frame, fragment);
 fragmentTransactionEditProfile.commit();
于 2016-11-22T07:11:09.250 に答える