2013-08-12 13 views
6

Finora non ho avuto problemi più gravi passando da ActionBarSherlock a ActionBarCompat. Sul mio Nexus 4 funziona piuttosto bene. Come ho iniziato a testare sul mio vecchio Nexus One in esecuzione 2.3.6 ho riscontrato un problema durante la rotazione del dispositivo. Chiedo una caratteristica finestra per mostrare lo stato di avanzamento intermedio nella ActionBar:Utilizzo di ActionBarCompat e requestWindowFeature

@Override 
protected void onCreate(final Bundle savedInstanceState) 
{ 
    super.onCreate(savedInstanceState); 

    requestWindowFeature(android.view.Window.FEATURE_PROGRESS); 
    requestWindowFeature(android.view.Window.FEATURE_INDETERMINATE_PROGRESS); 

    setupActionBar(getSupportActionBar()); 

} 

Questo funziona abbastanza bene su Jelly Bean.

Su 2.3.6 è ottenere questo Stack Trace:

08-12 13:34:09.242: E/AndroidRuntime(4602): FATAL EXCEPTION: main 
08-12 13:34:09.242: E/AndroidRuntime(4602): java.lang.RuntimeException: Unable to start activity ComponentInfo{net.app.packagename/net.app.fragment.CustomActivity}: android.util.AndroidRuntimeException: requestFeature() must be called before adding content 
08-12 13:34:09.242: E/AndroidRuntime(4602):  at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1647) 
08-12 13:34:09.242: E/AndroidRuntime(4602):  at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:1663) 
08-12 13:34:09.242: E/AndroidRuntime(4602):  at android.app.ActivityThread.handleRelaunchActivity(ActivityThread.java:2832) 
08-12 13:34:09.242: E/AndroidRuntime(4602):  at android.app.ActivityThread.access$1600(ActivityThread.java:117) 
08-12 13:34:09.242: E/AndroidRuntime(4602):  at android.app.ActivityThread$H.handleMessage(ActivityThread.java:935) 
08-12 13:34:09.242: E/AndroidRuntime(4602):  at android.os.Handler.dispatchMessage(Handler.java:99) 
08-12 13:34:09.242: E/AndroidRuntime(4602):  at android.os.Looper.loop(Looper.java:130) 
08-12 13:34:09.242: E/AndroidRuntime(4602):  at android.app.ActivityThread.main(ActivityThread.java:3683) 
08-12 13:34:09.242: E/AndroidRuntime(4602):  at java.lang.reflect.Method.invokeNative(Native Method) 
08-12 13:34:09.242: E/AndroidRuntime(4602):  at java.lang.reflect.Method.invoke(Method.java:507) 
08-12 13:34:09.242: E/AndroidRuntime(4602):  at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:839) 
08-12 13:34:09.242: E/AndroidRuntime(4602):  at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:597) 
08-12 13:34:09.242: E/AndroidRuntime(4602):  at dalvik.system.NativeStart.main(Native Method) 
08-12 13:34:09.242: E/AndroidRuntime(4602): Caused by: android.util.AndroidRuntimeException: requestFeature() must be called before adding content 
08-12 13:34:09.242: E/AndroidRuntime(4602):  at com.android.internal.policy.impl.PhoneWindow.requestFeature(PhoneWindow.java:181) 
08-12 13:34:09.242: E/AndroidRuntime(4602):  at android.app.Activity.requestWindowFeature(Activity.java:2729) 
08-12 13:34:09.242: E/AndroidRuntime(4602):  at net.app.fragment.BaseFragmentActivity.onCreate(BaseFragmentActivity.java:50) 
08-12 13:34:09.242: E/AndroidRuntime(4602):  at net.app.fragment.CustomActivity.onCreate(CustomActivity.java:55) 
08-12 13:34:09.242: E/AndroidRuntime(4602):  at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1047) 
08-12 13:34:09.242: E/AndroidRuntime(4602):  at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1611) 
08-12 13:34:09.242: E/AndroidRuntime(4602):  ... 12 more 
08-12 13:34:12.092: I/Process(4602): Sending signal. PID: 4602 SIG: 9 

Qualcuno sa come risolvere questo problema?

riguarda

risposta

0

Usa supportRequestWindowFeature(WindowCompat.FEATURE_xxx)

cioè È inoltre necessario utilizzare WindowCompat.FEATURE_xxx invece di Window.FEATURE_xxx per comptability all'indietro.

0

Per coloro, che non invocano requestWindowFeature() metodo, ma ancora ottenere l'eccezione, provare questa soluzione:

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    try { 
     super.onCreate(savedInstanceState); 
    } catch (Throwable e) { 
     //dummy workaround 
    } 
    setContentView(getLayoutResId()); 

vedere https://code.google.com/p/android/issues/detail?id=60841

0

Protocollo errori dice chiaramente 'requestFeature() deve essere chiamata prima di aggiungere soddisfare'. Quindi devi chiamare 'super.onCreate (savedInstanceState);' dopo le chiamate 'requestWindowFeature'. E non è necessario chiamare supportRequestWindowFeature (Window.FEATURE _...) come menzionato sopra. Vedi il codice di lavoro qui sotto.

@Override 
    public void onCreate(Bundle savedInstanceState) { 
     requestWindowFeature(Window.FEATURE_INDETERMINATE_PROGRESS); 
     requestWindowFeature(Window.FEATURE_PROGRESS); 
     super.onCreate(savedInstanceState); 
Problemi correlati