2014-09-26 12 views
11
android.util.AndroidRuntimeException: requestFeature() must be called before adding content 

tôi nhận được lỗi này khi tôi sử dụngrequestFeature() phải được gọi trước khi thêm nội dung trong Fragment

getActivity().getWindow().requestFeature(Window.FEATURE_ACTION_BAR_OVERLAY); 

từ mảnh. Tôi muốn thay đổi kiểu thanh tác vụ chỉ trong đoạn này. Vì vậy, tôi không thể thiết lập điều này trong MainActivity. Làm thế nào để giải quyết điều này?

tôi thấy câu hỏi này requestFeature() must be called before adding content nó không nói như thế nào để giải quyết vấn đề này từ một mảnh

+1

trước khi gọi setContentView(), bạn nên đặt 'getActivity(). GetWindow(). RequestFeature (Window.FEATURE_ACTION_BAR_OVERLAY);' –

+0

http://stackoverflow.com/questions/4250149/requestfeature-must-be-called- trước khi thêm nội dung – raja

+0

Của nó trong một mảnh. – Sunny

Trả lời

1

Bạn phải gọi getWindow().requestFeature(Window.FEATURE_ACTION_BAR_OVERLAY); trước setContentView() trong phương pháp onCreate() của hoạt động. Bạn phải thêm dòng này vào số FragmentActivity của mình từ nơi số Fragment đang được gọi.

+0

Có nhiều hơn một mảnh. Tôi muốn tính năng này chỉ trong một đoạn cụ thể. Do đó, nếu đặt tính năng này trong Hoạt động gốc, tất cả các đoạn khác có tính năng này – Sunny

+0

@Sunny cho rằng bạn phải tạo chủ đề tùy chỉnh và áp dụng nó cho đoạn của bạn lớp – Piyush

1

requestFeature() nên được gọi trước setContentView() trong hoạt động của bạn. Gọi getActivity().getWindow().requestFeature() từ Fragment là thực hành không tốt. Nếu bạn muốn hiển thị thanh tác vụ của mình bị trì hoãn, tôi sẽ khuyên bạn nên ẩn thanh tác vụ trong onCreate() hoạt động của mình & thôi ẩn nó trong onViewCreated() trong đoạn của bạn.

+1

Tôi muốn tạo thanh tác vụ trong suốt trong đoạn này – Sunny

+0

bạn cần tạo lại hoạt động trong trường hợp đó hoặc sử dụng một số chế độ xem thay vì thanh tác vụ gốc – Akhil

+0

Có ngăn điều hướng. Chế độ xem tùy chỉnh không phải là possilbe – Sunny

1

Bạn cần tạo một Hoạt động riêng cho đoạn này và sau đó requestFeature() trên hoạt động đó trước setContentView() vì requestFeature() là phương thức android.view.Window. Các tính năng của cửa sổ dành cho hoạt động cụ thể. Bạn có thể thao tác các hành vi cửa sổ cho một hoạt động cụ thể không phải là đoạn cụ thể.

4

Bất kể mọi người đang phản hồi vấn đề này vẫn xuất hiện nếu bạn sử dụng AppCompatActivity làm phụ huynh cho hoạt động của mình.

Đối với tôi mã này ném lỗi: ​

protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    getWindow().requestFeature(Window.FEATURE_PROGRESS); 
    setContentView(R.layout.activity_browser); 
} 
  • Test 1: MyActivity extends Activity ==> Làm việc
  • thử nghiệm 2: MyActivity extends AppCompatActivity ==> Lỗi "requestFeature() phải được gọi trước khi thêm nội dung trong hoạt động "

Giải pháp cho Kiểm tra 2 (nếu bạn đang sử dụng Appcompat) là gọi requestFeaturetrướcsuper.onCreate. Nó sẽ giải quyết vấn đề của bạn.

+0

Điều này giải quyết được vấn đề. – dpaksoni

1

Tôi cũng gặp lỗi này, làm việc với DialogFragment, mặc dù tôi không gọi requestFeature().

Tôi đã gọi hàm getDecorView() từ hàm onActivitiyCreate() của DialogFragment như một phần của một số mã truy tìm mà tôi đã viết để giúp tôi hiểu cách thức và thời điểm Windows được tạo. Điều đó làm việc tốt, nhưng một chút sau đó trong vòng đời của mảnh vỡ, phương thức onStart() của nó được gọi. Điều đó được gọi là chương trình của Dialog() mà cuối cùng được gọi là onDreate của AlertDialog() mà cuối cùng được gọi là phương thức requestFeature() của PhoneWindow để yêu cầu Window.FEATURE_NO_TITLE.

Vì gọi getDecorView() "lần đầu tiên 'khóa trong' các đặc tính cửa sổ khác nhau như được mô tả trong setContentView (View, android.view.ViewGroup.LayoutParams).", Điều này vi phạm yêu cầu rằng "requestFeature() được gọi trước khi thêm nội dung trong Phân đoạn "- sự tinh tế là nội dung đã được thêm gián tiếp bởi lệnh gọi hàm getDecorView() của tôi.

Khắc phục là gọi hàm peekDecorView() thay vì getDecorView().

+1

Chỉ cần wow. Bạn về cơ bản đã cứu sống của tôi như nó có vẻ. Chúng tôi đã gặp phải lỗi trong quá trình sản xuất đã làm hỏng ứng dụng bằng chuỗi truy vấn "requestFeature()". Chúng tôi không thể theo dõi nó trong hai ngày qua - cho đến khi tôi tình cờ gặp bài đăng của bạn. Chúng tôi cũng đã gọi getDecorView trên DialogFragment. Tôi đã thay đổi điều đó và tôi đoán nó hoạt động! Tôi vẫn không chắc chắn 100% nếu điều này thực sự khắc phục toàn bộ vấn đề theo mọi cách có thể trong trường hợp của chúng tôi, nhưng có vẻ như chúng tôi đang trên đường tốt! Cảm ơn bạn. – battlepope

+0

Cool ... Tôi hy vọng bạn đã giải quyết mọi thứ :-). –

Các vấn đề liên quan