android android-actionbar actionbarsherlock

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



android-actionbar (14)

ActionBarSherlock utilizar la biblioteca ActionBarSherlock para proporcionar compatibilidad con ActionBar compatible con versiones anteriores con pestañas 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 pestañas, se bloquea cada vez. Aquí está el rastro de la pila:

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) { } }


Acabo de cambiar en Manifiesto

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

a:

android:theme="@style/AppTheme"

y el error se fue


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.


Debes agregar el tema de Sherlock a tu aplicación

<application android:icon="@drawable/icon" android:label="@string/app_name" android:debuggable="false" android:theme="@style/Theme.Sherlock">


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);


Heres uno divertido: no fije el tema a -

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


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.


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 cuando la actividad se usa en un TabHost en Honeycomb +.


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);


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.


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


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");


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:-

<application android:allowBackup="true" android:icon="@drawable/ic_launcher" android:label="@string/app_name" android:theme="@style/Theme.Sherlock.Light" >

también puedes usar el tema oscuro:

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


android:theme="@android:style/Theme.Dialog" a mi actividad en el archivo de Manifiesto de Android en un intento 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