ActivityCompat.invalidateOptionsMenu(MainActivity.this);
を使用して、メニュー項目「更新」を自動的に有効化/無効化できるようにしました。「メニュー」オプションに触れる必要はありません(ユーザーがメニューを開いたままにすることを想像してください... 「自動的に無効化および有効化するメニュー項目)。
ActivityCompat.invalidateOptionsMenu(MainActivity.this)
は、Android 11+で正常に動作します。しかし、Android API <11に使用できるものは何ですか?:Sたくさんありますが、答えが見つかりません。
これはAndroid API 11+でonPrepareOptionsMenu
とActivityCompat.invalidateOptionsMenu(MainActivity.this)
を使用して正常に動作します。問題はAndroid API <11。
これが私のonPrepareOptionsMenu
メソッドです:
@Override
public boolean onPrepareOptionsMenu(Menu menu) {
if(menuRefreshEnable){
menu.getItem(0).setEnabled(true);
}
if(!menuRefreshEnable){
menu.getItem(0).setEnabled(false);
}
return true;
}
_API < 11
_でsupportInvalidateOptionsMenu()
メソッドを使用
ActivityCompat.invalidateOptionsMenu()
はonPrepareOptionsMenu();
をコールバックせず、メニューを直接更新します。いくつかのLog.d()
を入れて、自分でチェックアウトしてください。
これは私のために働いています(API 8を使用しています):
_private Menu mMenu;
@Override
public void onCreateOptionsMenu(Menu menu, MenuInflater inflater) {
inflater.inflate(R.menu.track_fragment, menu);
mMenu = menu;
}
...
private void someMethod() {
...
if (mMenu != null) {
MenuItem item = mMenu.findItem(R.id.new_track);
if (item != null) {
item.setVisible(false);
ActivityCompat.invalidateOptionsMenu(this.getActivity());
}
}
...
}
_
私のsomeMethod()
はonCreateOptionsMenu()
の前でもいくつかの場所から呼び出されるので、_mMenu != null
_をチェックする必要があります。
APIが11以上であり、サポートされている場合、これはtrueを返します。 API 11より前は、メニューボタンを押すとメニューが描画されるため、このメソッドは自動的に実行されるため、このメソッドは必要ありません。