Android: getSupportActionBar () siempre devuelve null en la biblioteca ActionBarSherlock

Intento utilizar la biblioteca ActionBarSherlock para proporcionar compatibilidad con ActionBar compatible con versiones anteriores con tabs en mi aplicación de Android, así que descargué la versión más reciente, construí la demostración y la ejecuté.

Si vas a la barra de acción, entonces seleccionas la navegación de tabs, se bloquea cada vez. Aquí está el rastro de la stack:

09-03 02:34:47.940: ERROR/AndroidRuntime(3078): FATAL EXCEPTION: main 09-03 02:34:47.940: ERROR/AndroidRuntime(3078): java.lang.RuntimeException: Unable to start activity ComponentInfo{com.actionbarsherlock.sample.demos/com.actionbarsherlock.sample.demos.app.ActionBarTabNavigation}: java.lang.NullPointerException 09-03 02:34:47.940: ERROR/AndroidRuntime(3078): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1748) 09-03 02:34:47.940: ERROR/AndroidRuntime(3078): at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:1764) 09-03 02:34:47.940: ERROR/AndroidRuntime(3078): at android.app.ActivityThread.access$1500(ActivityThread.java:122) 09-03 02:34:47.940: ERROR/AndroidRuntime(3078): at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1002) 09-03 02:34:47.940: ERROR/AndroidRuntime(3078): at android.os.Handler.dispatchMessage(Handler.java:99) 09-03 02:34:47.940: ERROR/AndroidRuntime(3078): at android.os.Looper.loop(Looper.java:132) 09-03 02:34:47.940: ERROR/AndroidRuntime(3078): at android.app.ActivityThread.main(ActivityThread.java:4025) 09-03 02:34:47.940: ERROR/AndroidRuntime(3078): at java.lang.reflect.Method.invokeNative(Native Method) 09-03 02:34:47.940: ERROR/AndroidRuntime(3078): at java.lang.reflect.Method.invoke(Method.java:491) 09-03 02:34:47.940: ERROR/AndroidRuntime(3078): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:841) 09-03 02:34:47.940: ERROR/AndroidRuntime(3078): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:599) 09-03 02:34:47.940: ERROR/AndroidRuntime(3078): at dalvik.system.NativeStart.main(Native Method) 09-03 02:34:47.940: ERROR/AndroidRuntime(3078): Caused by: java.lang.NullPointerException 09-03 02:34:47.940: ERROR/AndroidRuntime(3078): at com.actionbarsherlock.sample.demos.app.ActionBarTabNavigation.onCreate(ActionBarTabNavigation.java:19) 09-03 02:34:47.940: ERROR/AndroidRuntime(3078): at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1048) 09-03 02:34:47.940: ERROR/AndroidRuntime(3078): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1712) 09-03 02:34:47.940: ERROR/AndroidRuntime(3078): ... 11 more 

No puedo avanzar con mi aplicación hasta que esto se solucione. Escribí un montón de código, configuré la barra de acciones en mi aplicación y traté de ejecutarlo, y se bloquea con un NPE debido al valor de retorno nulo en la llamada getSupportActionBar() .

El código relevante está realmente en la demostración de la biblioteca:

 public class ActionBarTabNavigation extends FragmentActivity implements ActionBar.TabListener { @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); getSupportFragmentManager() .beginTransaction() .add(android.R.id.content, FragmentStackSupport.CountingFragment.newInstance(0)) .commit(); getSupportActionBar().setNavigationMode(ActionBar.NAVIGATION_MODE_TABS); for (int i = 0; i < 3; i++) { ActionBar.Tab tab = getSupportActionBar().newTab(); tab.setText("Tab " + i); tab.setTabListener(this); getSupportActionBar().addTab(tab); } } @Override public void onTabReselected(Tab tab, FragmentTransaction ft) { } @Override public void onTabSelected(Tab tab, FragmentTransaction ft) { getSupportFragmentManager() .beginTransaction() .replace(android.R.id.content, FragmentStackSupport.CountingFragment.newInstance(tab.getPosition())) .commit(); } @Override public void onTabUnselected(Tab tab, FragmentTransaction ft) { } } 

Debes agregar el tema de Sherlock a tu aplicación

  

Tuve el mismo problema en el Android ICS 4.0.4. Estaba usando requestWindowFeature(Window.FEATURE_NO_TITLE); en FragmentActivity, pero esto ocultaba ActionBar en dispositivos ICS + que causaba que getSupportActionBar() fuera nulo.

Simplemente eliminé el:
requestWindowFeature(Window.FEATURE_NO_TITLE);

Y funcionó como un encanto.

Espero que ayude a alguien.

Otra razón por la que esto sucederá en dispositivos Honeycomb + es porque el atributo windowNoTitle se establece en su estilo. Deshágase de eso ya que ActionBarSherlock lo eliminará automáticamente en dispositivos pre-Honeycomb por usted.

Otra razón por la que puede obtener un valor nulo de getSupportActionBar() es intentar llamarlo antes que setContentView(R.layout.main) o en su ejemplo al agregar un fragmento.

Refactoré oncreate y puse getSupportActionBar().setNavigationMode(ActionBar.NAVIGATION_MODE_TABS); después de super.onCreate(savedInstanceState);

Heres uno divertido: no fije el tema a –

  android:theme="@style/Theme.NoActionbar" 

Otra razón por la que puede obtener un valor nulo de getSupportActionBar() es cuando la actividad se usa en un TabHost en Honeycomb +.

Dependiendo de cómo escriba su código. asegúrese de haber configurado la barra de herramientas primero antes de llamarlo.

  mToolbar = (Toolbar) findViewById(R.id.toolbar); setSupportActionBar(mToolbar); getSupportActionBar().setDisplayShowHomeEnabled(true); 

Acabo de cambiar en Manifiesto

 android:theme="@style/AppTheme.NoActionBar" 

a:

  android:theme="@style/AppTheme" 

y el error se fue

cada vez que establecemos una vista personalizada usando la biblioteca sherlock. simplemente elimine this requestWindowFeature (Window.FEATURE_NO_TITLE); de esta manera hacemos una vista personalizada usando la biblioteca de la barra sherlock ..

  getSupportActionBar().setDisplayHomeAsUpEnabled(true); getSupportActionBar().setDisplayOptions(ActionBar.DISPLAY_SHOW_CUSTOM); getSupportActionBar().setCustomView(R.layout.header_sherlock_xmllayout); header_tvleft = (TextView) findViewById(R.id.header_tvleft); header_tvleft.setText("Back"); 

Tuve este problema después de (tontamente) olvidar llamar al super.onCreate()

está declarado Theme.Sherlock o Theme.Sherlock.Light como su actividad o tema de aplicación en el manifiesto O utilizando un tema personalizado que hereda de uno de estos dos

Ejemplo:-

  

también puedes usar el tema oscuro:

 android:theme="@style/Theme.Sherlock" 

Me encontré con esto después de agregar una biblioteca a mi proyecto. El remedio era buscar en la biblioteca y eliminar cualquier nombre de estilo “AppTheme” si está utilizando el mismo nombre de tema en su manifiesto. No hubo un conflicto en mi Galaxy S4, Jelly Bean, mientras hubo un conflicto en mi Galaxy Tab.

android:theme="@android:style/Theme.Dialog" a mi actividad en el archivo de Manifiesto de Android en un bash de convertirlo en una actividad de diálogo. Esto también eliminará la barra de acción, por lo tanto, un puntero nulo. Eliminar o no llamar a getSupportActioBar

Cometí este error porque agregué la barra demasiado en el archivo fragmento xml. El código para encontrar la barra de herramientas en fragmento es este: getActivity (). FindViewByid (id …), pero mi barra de herramientas está en el archivo xml de fragmento, por lo que no se encontró ninguna barra de herramientas y no hay ninguna barra de herramientas establecidaSipprotActionBar () y tampoco se obtiene cuando getSupportActionBar (). Así que recuerda: no coloques la barra de herramientas en el archivo xml de tu fragmento.