studio - Android invalidateOptionsMenu()para API<11




desplegable emergente (4)

En API < 11 use el método supportInvalidateOptionsMenu()

ActivityCompat.invalidateOptionsMenu(MainActivity.this); para que mi elemento de menú "actualizar" pueda habilitarse / deshabilitarse automáticamente sin utilizar la opción "Menú" (imagine que el usuario deja el Menú abierto ... Necesito que el elemento de menú "Actualizar" se deshabilite automáticamente y se habilite a sí mismo) )

ActivityCompat.invalidateOptionsMenu(MainActivity.this) funciona bien en Android 11+. ¿Pero qué puedo usar para Android API <11? : S He buscado mucho pero no puedo encontrar una respuesta. ¿Puede alguien ayudarme en esto?

Esto funciona bien en Android API 11+, usando onPrepareOptionsMenu y ActivityCompat.invalidateOptionsMenu(MainActivity.this) . El problema es tratar de hacerlo en Android API <11.

Aquí está mi método onPrepareOptionsMenu :

@Override
public boolean onPrepareOptionsMenu(Menu menu) {
    if(menuRefreshEnable){
        menu.getItem(0).setEnabled(true);
    }
    if(!menuRefreshEnable){
        menu.getItem(0).setEnabled(false);
    }       
    return true;
}

ActivityCompat.invalidateOptionsMenu() no realiza una devolución de llamada onPrepareOptionsMenu(); simplemente actualiza el menú directamente. Simplemente ponga Log.d() y eche un vistazo por su cuenta.

Esto funciona para mí (estoy usando 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());
        }
    }
...
}

Mi someMethod() se llama desde varios lugares, incluso antes de onCreateOptionsMenu() , así que debo marcar mMenu != null .


Esto se devolverá verdadero si la API es superior o igual a 11 y, por lo tanto, es compatible. Antes de API 11, el menú se dibuja cuando se presiona el botón de menú, por lo que no hay necesidad de este método, ya que ocurre automáticamente.


Contextsignifica componente (o aplicación) en varios períodos de tiempo. Si como tanta comida entre 1 y 2 pm, mi contexto de ese tiempo se usa para acceder a todos los métodos (o recursos) que uso durante ese tiempo. El contenido es un componente (aplicación) por tiempo particular. ContextLos componentes de la aplicación siguen cambiando según el ciclo de vida subyacente de los componentes o la aplicación. Por ejemplo, dentro del onCreate () de un Activity,

getBaseContext()- da el valor contextde lo Activityque está establecido (creado) por el constructor de actividad. getApplicationContext()- Da la Contextconfiguración (creada) durante la creación de la aplicación.

Nota: <application>contiene todos los componentes de Android.

<application>
    <activity> .. </activity> 

    <service>  .. </service>

    <receiver> .. </receiver>

    <provider> .. </provider>
</application> 

Significa que cuando llama getApplicationContext()desde dentro de cualquier componente, está llamando al contexto común de toda la aplicación.

Context Sigue siendo modificado por el sistema en función del ciclo de vida de los componentes.







android menu