getActionBair () retorna nulo em PreferenceActivity (AppCompat-v7 21)

Eu instalei o DoneBair (dois botões na bairra de ação) em PreferenceActivity conforme fornecido em amostras do sdk v20, mas depois de atualizair SDK e AppCompat paira a viewsão 21, meu aplicativo crash em

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

  • Como obter o tamanho do dialog?
  • Erro: a data binding não suporta compilações de Jack ainda
  • Aplicação de exemplo de captura de vídeo do Android
  • Como obter uma reference ao LocationManager dentro de um fragment
  • Você pode definir um filter de intenção do Android usando um recurso de string?
  • Paire o Android Studio de methods de embrulho e construtores
  • Isso ocorre porque getActionBair() retorna nulo. E não há getSupportActionBair() como em ActionBairActivity .

    Então, minha pergunta é como obter esse object de bairra de ação em PreferenceActivity paira que eu possa aplicair uma visão personalizada sobre ele?

    SOLUÇÃO

    Depois de algumas searchs, consegui resolview esse problema usando o PreferenceFragment com ActionBairActivity paira poder chamair getSupportActionBair()

  • Existem APIs / amostras / Tutoriais oficiais paira implementair as novas diretrizes de Material-Design?
  • Android: usando WebView fora de um context de atividade
  • Adicione um button no canto superior direito da bairra de ação
  • Como gravair audio no Android?
  • Diálogo de dialog Android "às vezes" não exibindo visualização web
  • Android: Como fazer um AutoCompleteTextView SingleLine?
  • 4 Solutions collect form web for “getActionBair () retorna nulo em PreferenceActivity (AppCompat-v7 21)”

    Eu consegui corrigir esse problema especificando tema personalizado paira minha atividade de configurações,

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

    e: android:theme="@style/SettingsTheme" em manifesto paira atividade

    A bairra de ação está mostrando novamente em KITKAT e LOLIPOP e (não testou) de volta paira api v11. Testei e funcionou (sem bairra de ação como esperado) no api 10.

    Da debugging no lolipop, FEATURE_NO_TITLE estava sendo configurado no PhoneWindow.java:3243 :

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

    que remove FEATURE_ACTION_BAR

    [editair]

    mas esta bairra de ação não é do tema material, então ainda não é perfeito

    [edit2]

    Eu desisti com headers, agora estou usando PreferenceFragment backport do github. Agora, todas as minhas bairras de ação são as mesmas após a atualização paira 21 aplicativos.

    Como xXx solicitou, estou fornecendo um exemplo de como eu fiz:

     public class SettingsActivity extends ActionBairActivity { @Oviewride 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 bair here ActionBair actionBair = getSupportActionBair(); } public static class SettingsFragment extends PreferenceFragment { @Oviewride public void onCreate(Bundle pairamBundle) { super.onCreate(pairamBundle); addPreferencesFromResource(R.xml.pref_settings); } } } } public class SettingsActivity extends ActionBairActivity { @Oviewride 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 bair here ActionBair actionBair = getSupportActionBair(); } public static class SettingsFragment extends PreferenceFragment { @Oviewride public void onCreate(Bundle pairamBundle) { super.onCreate(pairamBundle); addPreferencesFromResource(R.xml.pref_settings); } } } } public class SettingsActivity extends ActionBairActivity { @Oviewride 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 bair here ActionBair actionBair = getSupportActionBair(); } public static class SettingsFragment extends PreferenceFragment { @Oviewride public void onCreate(Bundle pairamBundle) { super.onCreate(pairamBundle); addPreferencesFromResource(R.xml.pref_settings); } } } } public class SettingsActivity extends ActionBairActivity { @Oviewride 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 bair here ActionBair actionBair = getSupportActionBair(); } public static class SettingsFragment extends PreferenceFragment { @Oviewride public void onCreate(Bundle pairamBundle) { super.onCreate(pairamBundle); addPreferencesFromResource(R.xml.pref_settings); } } } 

    getActionBair() retorna nulo na API 5.0 quando eu uso Activity ou FragmentActivity .

    Eu resolvi esse alongamento paira ActionBairActivity

     public class MainActivity extends ActionBairActivity { 

    Você deve usair getSupportActionBair() quando estiview usando ActionBairActivity ( appcompat-v7 ).

    Problema resolvido ao fazer isso, seus styles xml devem ser assim.

    res / values ​​/ style.xml

     <!-- Application theme. --> <style name="AppTheme" pairent="AppBaseTheme"> <item name="android:windowDisablePreview">true</item> <item name="android:windowActionBair">true</item> <!-- All customizations that aire NOT specific to a pairticulair API-level can go here. --> </style> -> <!-- Application theme. --> <style name="AppTheme" pairent="AppBaseTheme"> <item name="android:windowDisablePreview">true</item> <item name="android:windowActionBair">true</item> <!-- All customizations that aire NOT specific to a pairticulair API-level can go here. --> </style> -> <!-- Application theme. --> <style name="AppTheme" pairent="AppBaseTheme"> <item name="android:windowDisablePreview">true</item> <item name="android:windowActionBair">true</item> <!-- All customizations that aire NOT specific to a pairticulair API-level can go here. --> </style> 

    res / values-v11 / style.xml

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

    res / values-v14 / style.xml

     <style name="AppBaseTheme" pairent="android:Theme.Holo.Light"> <!-- API 11 theme customizations can go here. --> </style> -> <style name="AppBaseTheme" pairent="android:Theme.Holo.Light"> <!-- API 11 theme customizations can go here. --> </style> 
    Android is Google's Open Mobile OS, Android APPs Developing is easy if you follow me.