2013-08-12 20 views
6

cho đến giờ tôi không gặp vấn đề gì lớn hơn khi chuyển từ ActionBarSherlock sang ActionBarCompat. Trên Nexus 4 của tôi, nó hoạt động khá tốt. Khi tôi bắt đầu thử nghiệm trên Nexus One cũ của mình chạy 2.3.6, tôi đã gặp phải sự cố khi tôi xoay thiết bị. Tôi yêu cầu tính năng Cửa sổ hiển thị tiến trình trung gian trong ActionBar:Sử dụng ActionBarCompat và 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()); 

} 

Điều này hoạt động khá tốt trên Jelly Bean.

On 2.3.6 là có được Stack Trace này:

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 

Bất cứ ai cũng biết làm thế nào để sửa lỗi này?

liên quan

Trả lời

0

Sử dụng supportRequestWindowFeature(WindowCompat.FEATURE_xxx)

ví dụ: Bạn cũng cần phải sử dụng WindowCompat.FEATURE_xxx thay vì Window.FEATURE_xxx cho comptability lạc hậu.

0

Đối với những người, những người không gọi requestWindowFeature() phương pháp nhưng vẫn nhận được ngoại lệ, hãy thử cách này:

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

thấy https://code.google.com/p/android/issues/detail?id=60841

0

Lỗi log nói rõ 'requestFeature() phải được gọi trước khi thêm Nội dung'. Vì vậy, bạn phải gọi 'super.onCreate (savedInstanceState);' sau cuộc gọi 'requestWindowFeature'. Và không cần phải gọi supportRequestWindowFeature (Window.FEATURE _...) như đã đề cập ở trên. Xem mã hoạt động bên dưới.

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