7

Tôi gặp sự cố khi nhận được onPrepareOptionsMenu() để hoạt động chính xác. Không có vấn đề gì tôi cố gắng, tôi không thể làm cho nó được gọi.onPrepareOptionsMenu không được gọi là

Kiến trúc của ứng dụng của tôi như sau: Hoạt động chính của tôi chứa một Phân đoạn chứa ViewPager, lần lượt có bốn phiên bản Phân đoạn con. Hiện tại, tôi (thành công) điền vào menu tùy chọn ban đầu trong Hoạt động với onCreateOptionsMenu(), nhưng tôi muốn thêm một số tùy chọn bổ sung tương ứng với từng Phân đoạn con đang hoạt động.

Trong phân đoạn con tôi, tôi đã đảm bảo rằng setHasOptionsMenu(true) đang được gọi trong số onCreate() và được gọi là onActivityCreated(). Trong Hoạt động chính, onCreateOptionsMenu() được gọi một lần sau khi Phân đoạn con được khởi tạo, bất kể chúng có chứa supportInvalidateOptionsMenu() hay không. Sau đó nó được gọi lại bất cứ khi nào Fragment trong Pager được thay thế.

Tôi đã cố gắng di chuyển mã onPrepareOptionsMenu() lên cấp độ cho Phân đoạn gốc và đến Hoạt động chính - không có kết quả, cho thấy vấn đề không liên quan đến việc sử dụng các phân đoạn lồng nhau của tôi. Tôi cũng đã thử di chuyển phương thức onCreateOptionsMenu() từ Hoạt động chính sang cả hai đoạn, ở đó nó không bị mất đi.

Nếu có ai có ý tưởng gì đang xảy ra ở đây tôi sẽ rất biết ơn vì tôi đã bị mắc kẹt trong hai ngày này.

CẬP NHẬT - Tôi đã tìm ra chính xác vấn đề hiện tại, chỉ có tôi vẫn không chắc chắn cách khắc phục sự cố. Tôi đang thử nghiệm trên 4,2 và có vẻ như là onCreateOptionsMenu() được gọi sau onResume() trong Hoạt động - như đã thấy trong onCreateOptionsMenu called after onResume on JB 4.2. Tôi cho rằng điều này có nghĩa là các mảnh không thể gọi onPrepareOptionsMenu() vì menu thậm chí không tồn tại cho đến khi chúng được khởi tạo. Vậy làm cách nào để tôi giải quyết vấn đề này?

Trả lời

4

Đó là, phần nào chắc chắn, một vấn đề với ActionBarSherlock mà tôi đã bỏ qua khi kiểm tra trang sự cố của nó trên github. Về cơ bản, chức năng cho các menu tùy chọn trong các đoạn lồng nhau chưa được thêm vào, xem: https://github.com/JakeWharton/ActionBarSherlock/issues/828. Giải pháp của tôi bây giờ là thay thế Watson.java bằng một trong các tệp đã sửa đổi trong các nhận xét.

+2

bạn đã lưu tôi một ngày làm việc, đã đập đầu của tôi tại số này – slinden77

+0

@dmmh Có giải pháp phù hợp cho vấn đề đó ?? –

+0

trong nhận xét của tôi :) – slinden77

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