android getSupportActionBar () devuelve null en el fragmento

ACTUALIZAR

No había mencionado nada sobre el uso de ToolBar con ActionBarActivity . Y esa es la razón por la que siempre obtengo la excepción de puntero nulo. Para aquellos que enfrentan el mismo problema, por favor refiérase a esta respuesta


Tengo este código de fragmento para cambiar la apariencia de la barra de acción de soporte cuando se cambia el fragmento.

 @Override public void onActivityCreated(Bundle savedInstanceState) { super.onActivityCreated(savedInstanceState); setHasOptionsMenu(true); mActionBar = ((ActionBarActivity)getActivity()).getSupportActionBar(); SpannableString s = new SpannableString("Dashboard"); s.setSpan(new ForegroundColorSpan(getResources().getColor(R.color.app_blue_text)), 0, s.length(), Spannable.SPAN_INCLUSIVE_INCLUSIVE); s.setSpan(new TypefaceSpan(getActivity(), "Optima-Regular.ttf"), 0, s.length(), Spannable.SPAN_EXCLUSIVE_EXCLUSIVE); if( null!= mActionBar){ mActionBar.setElevation(0); mActionBar.setTitle(s); } } 

He referido preguntas anteriores / similares sobre cómo solucionar este error. Estas soluciones sugieren cambiar el aspecto de la onActivityCreated() de onActivityCreated() en el método onActivityCreated() . Intenté onAttach() también. Ninguno parece funcionar. He utilizado la barra de acción de soporte para mantener la compatibilidad con versiones anteriores. Activity también se ActionBarActivity según ActionBarActivity .

Código completo es bastante largo, así que he saltado publicar. Si es necesario, puedo publicar el código completo y actualizar la pregunta con más detalles también.

Registro de errores

 Caused by: java.lang.NullPointerException at com.example.testapp.fragments.NavigationDrawerFragment.onActivityCreated(NavigationDrawerFragment.java:215) 

La línea 215 es: mActionBar.setElevation(0);

Me faltó mencionar poco más información en esta pregunta. Esa es la razón por la que otros usuarios agradables de SO no pudieron contestar correctamente. Así que aquí respondo yo mismo.

He utilizado ToolBar en lugar de ActionBar regular. Cuando utilice ToolBar , debe establecerlo como ActionBar. Así que haciendo –

 toolbar = (Toolbar) getActivity().findViewById(toolbarId); ((ActionBarActivity)getActivity()).setSupportActionBar(toolbar); 

Y después de eso puedo cambiar el título y la apariencia fácilmente por –

 ((ActionBarActivity)getActivity()).getSupportActionBar().setTitle(s); 

Sólo recuerde establecer la barra de herramientas como barra de acción antes de utilizar realmente barra de acción en el fragmento.

Solo usa:

 mActionBar = getActivity().getSupportActionBar(); 

o:

 mActionBar = ((yourActivityName)getActivity()).getSupportActionBar(); 

[ UPDATE ] Quitar la línea mActionBar.setElevation(0); porque setElevation sólo está disponible para API 21+

  • Error: no se pudo encontrar el destino con la cadena de hash 'android-21'
  • AppCompat 21: name = colorPrimary no funciona junto con name = actionBarStyle
  • Cómo diseñar el color del cursor de SearchView en AppCompat
  • La barra de herramientas no es visible en dispositivos Android 4.X
  • Cómo utilizar la barra de progreso indeterminada en appcompat-v7 r21 biblioteca?
  • CardView inserta la línea oscura en la parte inferior
  • No puedo conectar android-support-v7-appcompat a mi proyecto
  • ¿Cómo agregar bibliotecas de soporte?
  • Barra de herramientas de AppCompat: Cambiar color de icono de desbordamiento en ActionMode
  • Cambio de fondo y color de texto de AppCompat Light DarkActionBar Theme en android
  • Cómo implementar la elevación Material-design para Pre-lollipop
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.