GetActionBar () devuelve null en PreferenceActivity (AppCompat-v7 21)

He implementado DoneBar (dos botones en la barra de acción) en PreferenceActivity como se proporciona en v20 sdk muestras, pero después de actualizar SDK y AppCompat a la versión 21 mi aplicación se bloquea en

java.lang.NullPointerException: Attempt to invoke virtual method 'void android.app.ActionBar.setDisplayOptions(int, int)' on a null object reference

Esto se debe a que getActionBar() devuelve null. Y no hay getSupportActionBar() como en ActionBarActivity .

Así que mi pregunta es cómo obtener ese objeto de barra de acciones en PreferenceActivity para que pueda aplicar la vista personalizada en él?

Resuelto

Después de algunas investigaciones logré resolver este problema usando PreferenceFragment con ActionBarActivity para poder llamar a getSupportActionBar()

Me las arreglé para solucionar este problema especificando tema personalizado para mi actividad de configuración,

 <style name="SettingsTheme" parent="style/Theme.AppCompat.Light"> <item name="android:windowNoTitle">false</item> <item name="android:windowActionBar">true</item> </style> 

Y: android:theme="@style/SettingsTheme" en el manifiesto para la actividad

La barra de acción se muestra de nuevo en KITKAT y LOLIPOP y (no lo han probado) de vuelta a api v11. Lo probé y funciona (sin barra de acción como se esperaba) en api 10.

Desde la depuración en lolipop, FEATURE_NO_TITLE se estaba configurando en PhoneWindow.java:3243 :

  if (a.getBoolean(R.styleable.Window_windowNoTitle, false)) { requestFeature(FEATURE_NO_TITLE); 

Que elimina FEATURE_ACTION_BAR

[editar]

Pero esta barra de acción no es de tema material, así que todavía no es perfecto

[Editar2]

Me di con los encabezados, ahora estoy utilizando PreferenceFragment backport de github. Ahora todas mis barras de acción son las mismas después de la actualización a appcompact 21.

Como xXx pedido Estoy dando ejemplo cómo lo hice:

 public class SettingsActivity extends ActionBarActivity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); // Display the fragment as the main content. getFragmentManager().beginTransaction() .replace(android.R.id.content, new SettingsFragment()) .commit(); // use action bar here ActionBar actionBar = getSupportActionBar(); } public static class SettingsFragment extends PreferenceFragment { @Override public void onCreate(Bundle paramBundle) { super.onCreate(paramBundle); addPreferencesFromResource(R.xml.pref_settings); } } } 

getActionBar() devuelve null en API 5.0 cuando uso Activity o FragmentActivity .

He resuelto este extendig a ActionBarActivity

 public class MainActivity extends ActionBarActivity { 

Debe utilizar getSupportActionBar() cuando está utilizando ActionBarActivity ( appcompat-v7 ).

Problema resuelto al hacer esto, su xml estilos debe tener este aspecto.

Res / values ​​/ style.xml

 <!-- Application theme. --> <style name="AppTheme" parent="AppBaseTheme"> <item name="android:windowDisablePreview">true</item> <item name="android:windowActionBar">true</item> <!-- All customizations that are NOT specific to a particular API-level can go here. --> </style> 

Res / values-v11 / style.xml

 <style name="AppBaseTheme" parent="android:Theme.Holo.Light"> <!-- API 11 theme customizations can go here. --> </style> 

Res / values-v14 / style.xml

 <style name="AppBaseTheme" parent="android:Theme.Holo.Light"> <!-- API 11 theme customizations can go here. --> </style> 
  • Android 5.0 - las casillas de verificación de las preferencias no son visibles
  • Mantenga la barra de acciones visualizada al cambiar PreferenceScreen
  • ¿Cómo agregar un "oyente de clic largo" a una preferencia?
  • No puedo averiguar cómo usar un android PreferenciaActividad
  • Android PreferencesActivity para crear una preferencia MODE_WORLD_WRITEABLE entre aplicaciones
  • ¿Cómo obtener elementos (findViewById) para un diseño que se carga dinámicamente (setView) en un diálogo?
  • Inicio de Configuración Actividad de Preferencias XML funciona en 2.x pero no en 4.x
  • El botón de retroceso de Android no vuelve a la actividad anterior
  • Advertencia de método obsoleto de Android con respecto a PreferenceActivity
  • Implementación de "color selector" de Android PreferenceScreen
  • Preferencias sin métodos obsoletos
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.