web-dev-qa-db-ja.com

Android invalidateOptionsMenu()for API <11

ActivityCompat.invalidateOptionsMenu(MainActivity.this);を使用して、メニュー項目「更新」を自動的に有効化/無効化できるようにしました。「メニュー」オプションに触れる必要はありません(ユーザーがメニューを開いたままにすることを想像してください... 「自動的に無効化および有効化するメニュー項目)。

ActivityCompat.invalidateOptionsMenu(MainActivity.this)は、Android 11+で正常に動作します。しかし、Android API <11に使用できるものは何ですか?:Sたくさんありますが、答えが見つかりません。

これはAndroid API 11+でonPrepareOptionsMenuActivityCompat.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;
}
76
SnitramSD

_API < 11_でsupportInvalidateOptionsMenu()メソッドを使用

232
Alexander Zhak

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_をチェックする必要があります。

5
user2461595

APIが11以上であり、サポートされている場合、これはtrueを返します。 API 11より前は、メニューボタンを押すとメニューが描画されるため、このメソッドは自動的に実行されるため、このメソッドは必要ありません。

0
AndroidPenguin