¿Por qué getActionView () devuelve null

He estado buscando una solución para esto durante horas. Sólo quiero agregar un conmutador en la barra de acción (como en la configuración de Bluetooth). Encontré una pregunta similar aquí, pero probablemente era vieja. De todas formas aquí está mi código:

Actividad principal:

@Override public boolean onCreateOptionsMenu(Menu menu) { MenuInflater inflater = getMenuInflater(); inflater.inflate(R.menu.menu_main, menu); MenuItem item = menu.findItem(R.id.myswitch); switchButton = (Switch) item.getActionView(); return super.onCreateOptionsMenu(menu); } 

Menu_main.xml

 <?xml version="1.0" encoding="utf-8"?> <menu xmlns:android="http://schemas.android.com/apk/res/android" xmlns:app="http://schemas.android.com/apk/res-auto" > <item android:id="@+id/menu_switch" android:title="off/on" app:showAsAction="always" app:actionLayout="@layout/switchlayout" app:actionViewClass="android.support.v7.widget.Switch" /> </menu> 

Switchlayout.xml

 <?xml version="1.0" encoding="utf-8"?> <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:app="http://schemas.android.com/apk/res-auto" android:layout_width="fill_parent" android:layout_height="match_parent" android:orientation="horizontal"> <Switch android:id="@+id/myswitch" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_centerVertical="true" android:background="#1E88E5" /> </RelativeLayout> 

Pero no importa lo que hago siempre tengo:

Intenta invocar … getActionView () 'en una referencia de objeto nulo

Estoy confundido porque acabo de definir el tema de la línea antes de R.id.myswitch se define, ¿me lío que hasta?

Además del simple tipo de error (debe ser menu_switch para que coincida con su XML), por el entrenamiento de vista de acción , usted tiene que usar MenuItemCompat.getActionView () para extraer el ActionView (y, en su caso, convertirlo a SwitchCompat ya que hay No android.support.v7.widget.Switch ).

 @Override public boolean onCreateOptionsMenu(Menu menu) { MenuInflater inflater = getMenuInflater(); inflater.inflate(R.menu.menu_main, menu); MenuItem item = menu.findItem(R.id.menu_switch); switchButton = (SwitchCompat) MenuItemCompat.getActionView(item); return super.onCreateOptionsMenu(menu); } 

Reemplazar

 MenuItem item = menu.findItem(R.id.myswitch); 

con

 MenuItem item = menu.findItem(R.id.menu_switch); 

Debido a que la identificación de su elemento en el menú xml es menu_switch, no myswitch.

¿Cómo sobre el uso de MenuItemCompat con la función estática:

 MenuItemCompat.getActionView (MenuItem item) 
  • En Activity.onCreate (), ¿por qué Intent.getExtras () a veces devuelve null?
  • Proguard Error / Dalvik Error 1 al firmar la aplicación para Android
  • ¿Cómo suprimir la advertencia de Gradle en Android Studio?
  • ¿Cómo evitar httpsURLConnection.getInputStream () en Android colgando si se proporcionan credenciales de inicio de sesión incorrectas?
  • YouTubePlayerFragment en ListView con AppCompatActivity Error
  • Patrón de bloqueo de múltiples hilos de SQLiteDatabase
  • Creación de aplicaciones modulares de Android en Eclipse
  • Reloj de 24 horas no funciona en formato dateformat android
  • Android OnResume no se llama cuando se usa TabHost y LocalActivityManager
  • Números abreviados en Android, locales sensibles
  • No se puede resolver el constructor ArrayAdapter
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.