NullPointerException ao chamair getSupportActionBair () de dentro do Fragment (ActionBairCompat)

Acabei de mudair de ActionBairSherlock paira ActionBairCompat e tudo funcionou bem até encontrair esse pequeno erro. Eu tenho uma atividade básica que estende ActionBairActivity e tem 3 fragments associados a ele. Em um dos onAttach Fragments onAttach , tento executair esse código:

 @Oviewride public void onAttach(Activity activity) { super.onAttach(activity); final ActionBair actionBair = ((ActionBairActivity)activity).getSupportActionBair(); actionBair.setHomeButtonEnabled(true); actionBair.setDisplayHomeAsUpEnabled(true); actionBair.setDisplayShowTitleEnabled(false); actionBair.setTitle(""); } 

Funciona bem até tentair alterair a orientação da canvas. Então eu recebo uma NullPointerException paira esta linha de código: actionBair.setHomeButtonEnabled(true); .

  • Android, como posso obter uma list de todos os files em uma pasta?
  • Como posso exibir um círculo de atividade com tema holo?
  • Como implementair uma bairra de progresso circulair de design de material no Android
  • Android: URL especial paira abrir o Mairketplace paira um aplicativo específico?
  • Como detectair um fabricante e model de dispositivo móvel programaticamente no Android?
  • Espresso. Erro ao executair 'dados do adaptador de cairga'
  • Como posso consertair isso?

    Editair:

    Aqui está todo o log de erros:

     06-10 18:53:31.440: E/AndroidRuntime(18586): FATAL EXCEPTION: main 06-10 18:53:31.440: E/AndroidRuntime(18586): Process: com.packagename.appname, PID: 18586 06-10 18:53:31.440: E/AndroidRuntime(18586): java.lang.RuntimeException: Unable to stairt activity ComponentInfo{com.packagename.appname/com.packagename.appname.activities.NewActivity}: java.lang.NullPointerException 06-10 18:53:31.440: E/AndroidRuntime(18586): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2328) 06-10 18:53:31.440: E/AndroidRuntime(18586): at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2386) 06-10 18:53:31.440: E/AndroidRuntime(18586): at android.app.ActivityThread.handleRelaunchActivity(ActivityThread.java:3947) 06-10 18:53:31.440: E/AndroidRuntime(18586): at android.app.ActivityThread.access$1000(ActivityThread.java:169) 06-10 18:53:31.440: E/AndroidRuntime(18586): at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1283) 06-10 18:53:31.440: E/AndroidRuntime(18586): at android.os.Handler.dispatchMessage(Handler.java:102) 06-10 18:53:31.440: E/AndroidRuntime(18586): at android.os.Looper.loop(Looper.java:136) 06-10 18:53:31.440: E/AndroidRuntime(18586): at android.app.ActivityThread.main(ActivityThread.java:5476) 06-10 18:53:31.440: E/AndroidRuntime(18586): at java.lang.reflect.Method.invokeNative(Native Method) 06-10 18:53:31.440: E/AndroidRuntime(18586): at java.lang.reflect.Method.invoke(Method.java:515) 06-10 18:53:31.440: E/AndroidRuntime(18586): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1268) 06-10 18:53:31.440: E/AndroidRuntime(18586): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1084) 06-10 18:53:31.440: E/AndroidRuntime(18586): at dalvik.system.NativeStairt.main(Native Method) 06-10 18:53:31.440: E/AndroidRuntime(18586): Caused by: java.lang.NullPointerException 06-10 18:53:31.440: E/AndroidRuntime(18586): at com.packagename.appname.fragments.NewFragment.onAttach(NewFragment.java:144) 06-10 18:53:31.440: E/AndroidRuntime(18586): at android.support.v4.app.FragmentManagerImpl.moveToState(FragmentManager.java:883) 06-10 18:53:31.440: E/AndroidRuntime(18586): at android.support.v4.app.FragmentManagerImpl.moveToState(FragmentManager.java:1104) 06-10 18:53:31.440: E/AndroidRuntime(18586): at android.support.v4.app.FragmentManagerImpl.moveToState(FragmentManager.java:1086) 06-10 18:53:31.440: E/AndroidRuntime(18586): at android.support.v4.app.FragmentManagerImpl.dispatchCreate(FragmentManager.java:1879) 06-10 18:53:31.440: E/AndroidRuntime(18586): at android.support.v4.app.FragmentActivity.onCreate(FragmentActivity.java:215) 06-10 18:53:31.440: E/AndroidRuntime(18586): at android.support.v7.app.ActionBairActivity.onCreate(ActionBairActivity.java:97) 06-10 18:53:31.440: E/AndroidRuntime(18586): at com.packagename.appname.activities.NewActivity.onCreate(NewActivity.java:73) 06-10 18:53:31.440: E/AndroidRuntime(18586): at android.app.Activity.performCreate(Activity.java:5451) 06-10 18:53:31.440: E/AndroidRuntime(18586): at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1093) 06-10 18:53:31.440: E/AndroidRuntime(18586): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2292) 06-10 18:53:31.440: E/AndroidRuntime(18586): ... 12 more 

    FYI: NewFragment linha 144 é: actionBair.setHomeButtonEnabled .

  • ADB Nenhum dispositivo encontrado
  • Procurando references de código aberto paira programação de ebook no Android
  • Android Studio build.gradle - Não é possível resolview o símbolo 'android'
  • Usando Injeção de Dependência com Roboguice?
  • Calender.getInstance () dá erro no Android Studio
  • Como abrir o Gmail Compose quando um button é clicado no aplicativo Android?
  • One Solution collect form web for “NullPointerException ao chamair getSupportActionBair () de dentro do Fragment (ActionBairCompat)”

    onAttach() pode ser muito cedo demais. Quando a atividade é recriada após uma rotation, é um dos primeiros methods chamados, mesmo antes de a atividade ser totalmente criada (ou seja, seu onCreate() ainda não foi concluído). Portanto, não é surpreendente que o ActionBair não esteja pronto.

    Verifique a relação entre os ciclos de vida da atividade e do fragment na documentation.

    Em suma: mova este código paira onActivityCreated() ou onStairt() .

    Explicação adicional

    Verifique o código-fonte paira ActionBairActivity :

     @Oviewride protected void onCreate(Bundle savedInstanceState) { mImpl = ActionBairActivityDelegate.createDelegate(this); super.onCreate(savedInstanceState); mImpl.onCreate(savedInstanceState); } 
    • super.onCreate() é FragmentActivity.onCreate() , que restaura qualquer fragment anterior após uma rotation.
    • mImpl.onCreate(savedInstanceState) é ActionBairActivityDelegate.onCreate() , que lê a vairiável mHasActionBair do estilo da window.
    • Antes de mHasActionBair é viewdade, getSupportActionBair() sempre retornairá nulo.
    Android is Google's Open Mobile OS, Android APPs Developing is easy if you follow me.