2016-12-28 8 views
0

私のフラグメントでは、メニュー/メニューアイテムを横長モードでツールバーに表示したいだけです。オリエンテーションを変更すると、onCreateOptionsMenuonPrepareOptionsMenuが呼び出されていないことに気付いています。言い換えればonCreateOptionsMenuとonPrepareOptionsMenuはオリエンテーションの変更で呼び出されません

私は風景モードに変更(クラッシュ風景に肖像画から変更)しようとしたとき、私は風景モードでを開始しますが、ないとき、私のメニュー項目と私の風景のレイアウトにのみ機能します。私はonPrepareOptionsMenu()が呼び出されることはありませんので、私はinitializeLandscapeMenuViews()で初期化するビューにアクセスしようとすると、

public class MyFragment extends Fragment 
{ 
    private int orientation; 

    @Override 
    public void onCreate(Bundle savedInstanceState) 
    { 
     orientation = getResources().getConfiguration().orientation; 
     if (orientation == Configuration.ORIENTATION_LANDSCAPE) 
      setHasOptionsMenu(true); 

     super.onCreate(savedInstanceState); 
    } 

    @Override 
    public void onCreateOptionsMenu(Menu menu, MenuInflater inflater) 
    { 
     if (orientation == Configuration.ORIENTATION_LANDSCAPE) 
      inflater.inflate(R.menu.my_menu, menu); 

     super.onCreateOptionsMenu(menu, inflater); 
    } 

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

    @Override 
    public void onViewCreated(View view, Bundle savedInstanceState) 
    { 
     super.onViewCreated(view, savedInstanceState);   
     if (orientation == Configuration.ORIENTATION_PORTRAIT) 
      initializePortraitMenuViews(view); 
    } 

    @Nullable 
    @Override 
    public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) 
    { 
     return inflater.inflate(R.layout.my_layout, container, false); 
    } 

// other code not shown 
} 

クラッシュが発生します。

私は、デバッガを使用して通話のためにチェック:ランドスケープモードで

  1. onCreate
  2. onViewCreated
  3. onCreateOptionsMenu
  4. onPrepareOptionsMenu
を開始

を次いで

  1. onCreate
  2. onViewCreated

次いで肖像へ姿勢変化、バック風景

  1. onCreate
  2. onViewCreated
  3. に姿勢変化

onCreateOptionsMenuonPrepareOptionsMenuは私が何をしないのです

と呼ばれていませんか? (何か助けに感謝します)。

答えて

0

基本的に私はあなたのアプローチに問題は見られません。それでも、あなたはinvalidateOptionsMenu()を呼び出してみましたか? onCreateOptionsMenu()を呼び出して、メニューを再描画することをOSに指示するとします。

+0

こんにちは@Idanatz、実際にそれを試みましたが、コールバックは呼び出されません:( – Vinnie

-1

編集:私はTSが活動をしていると思っていましたが、彼は断片を使っています。ごめんなさい。

アクティビティを使用して作業している場合は、onCreateOptionsMenuonPrepareOptionsMenuにはブール値の戻り値があります。だから、voidの代わりにbooleanを返すことはできません。現在のアプローチでは、このために関数をオーバーライドしません。だから、関数が呼び出されることはないようです。 詳細については、APIをご覧ください。

+0

質問をよく読んでください。私は 'Activity'ではなく' Fragment'を拡張しています。 – Vinnie

+0

あなたはそうだ、私はその部分を逃した。ごめんなさい。 – Richh94

関連する問題