Tôi gặp sự cố khi thiết lập một số mục menu phân đoạn trong ActionBar
và tôi đã tìm cách giải quyết nó, nhưng tôi không hiểu tại sao nó hoạt động.Sử dụng onPrepareOptionsMenu thay vì onCreateOptionsMenu trong Fragment
Tôi muốn thay đổi mức hiển thị trong mục menu ngay sau khi tôi thổi phồng nó từ một tệp xml menu trong phương thức onCreateOptionsMenu
. Mã có vẻ hoạt động tốt, nhưng không có hiệu ứng rõ ràng. Tôi đã giải quyết được sự cố khi làm tăng menu trong phương thức onCreateOptionsMenu
nhưng thay đổi chế độ hiển thị của phương thức theo phương pháp onPrepareOptionsMenu
.
Điều tôi muốn biết là lý do thay đổi mức hiển thị trong onCreateOptionsMenu
không hoạt động.
Tôi có thể làm gì trong onPrepareOptionsMenu
mà tôi không thể thực hiện trong onCreateOptionsMenu
?
Có mẫu nào để theo dõi ở đây không?
Cảm ơn!
Dưới đây là các mã có liên quan, chỉ trong trường hợp:
public class MyFragment extends Fragment {
@Override
public void onCreateOptionsMenu(Menu menu, MenuInflater inflater) {
super.onCreateOptionsMenu(menu, inflater);
inflater.inflate(R.menu.my_menu, menu);
// This does not work, compiles and runs fine, but has no visible effect
MenuItem someMenuItem = menu.findItem(R.id.some_menu_item);
someMenuItem.setVisible(false);
}
@Override
public void onPrepareOptionsMenu(Menu menu) {
super.onPrepareOptionsMenu(menu);
// This does work
MenuItem someMenuItem = menu.findItem(R.id.some_menu_item);
someMenuItem.setVisible(false);
}
}
Tôi không chắc chắn, nhưng [tài liệu] (http://developer.android.com/reference/android/app/Activity. html # onCreateOptionsMenu (android.view.Menu)) cho biết: "_ ... Để cập nhật menu mỗi khi được hiển thị, hãy xem [onPrepareOptionsMenu (Menu)] (http://developer.android.com/reference/android/app/ Activity.html # onPrepareOptionsMenu (android.view.Menu)) ._ " –
Cảm ơn bạn đã bình luận! Điều ở đây là tôi không cần phải 'cập nhật nó mỗi khi nó được hiển thị' (nó được hiển thị mọi lúc, không có menu phụ), tôi chỉ muốn cấu hình menu một lần, khi được tạo/tăng cao và tất cả . Được rồi, nó có vẻ giống như vậy trong tình huống của tôi nhưng điểm của câu hỏi của tôi là hiểu tại sao nó lại hoạt động như thế này. Tại sao tôi phải 'định cấu hình lại' trình đơn mỗi khi được hiển thị khi tôi chỉ có thể thực hiện một lần khi tạo? –
Tôi hiểu và đồng ý rằng nên là một lựa chọn. Tuy nhiên theo ý kiến của tôi, tôi nghĩ đó là cách Android hoạt động. Trong một số trường hợp, bạn có thể mã hóa các thuộc tính của trình đơn bằng các thuộc tính xml. –