Android validateOptionsMenu () cho API <11


76

Tôi đã sử dụng ActivityCompat.invalidateOptionsMenu(MainActivity.this);để mục menu "làm mới" của mình có thể tự động được bật / tắt mà không cần phải chạm vào tùy chọn "Menu" (hãy tưởng tượng người dùng để Menu mở ... Tôi cần mục menu "Làm mới" để tự động tắt và tự kích hoạt).

Hoạt ActivityCompat.invalidateOptionsMenu(MainActivity.this)động tốt trong Android 11+. Nhưng tôi có thể sử dụng gì cho Android API <11? : S Tôi đã tìm kiếm rất nhiều nhưng tôi không thể tìm thấy câu trả lời. bất cứ ai có thể vui lòng giúp tôi về điều này?

Điều này hoạt động tốt trong Android API 11+, sử dụng onPrepareOptionsMenuActivityCompat.invalidateOptionsMenu(MainActivity.this). Sự cố đang cố gắng khắc phục sự cố trong Android API <11.

Đây là onPrepareOptionsMenuphương pháp của tôi :

@Override
public boolean onPrepareOptionsMenu(Menu menu) {
    if(menuRefreshEnable){
        menu.getItem(0).setEnabled(true);
    }
    if(!menuRefreshEnable){
        menu.getItem(0).setEnabled(false);
    }       
    return true;
}

1
Tôi khuyên bạn nên thay đổi phương thức của mình thành smth như @Override public boolean onPrepareOptionsMenu (Menu menu) {menu.getItem (0) .setEnabled (menuRefreshEnable); trả về true; }
Alexander Zhak

Câu trả lời:



5

ActivityCompat.invalidateOptionsMenu()không gọi lại onPrepareOptionsMenu();nó chỉ cập nhật menu trực tiếp. Chỉ cần đặt một số Log.d()và kiểm tra một mình.

Điều này phù hợp với tôi (tôi đang sử dụng API 8):

private Menu mMenu;
@Override
public void onCreateOptionsMenu(Menu menu, MenuInflater inflater) {
    inflater.inflate(R.menu.track_fragment, menu);
    mMenu = menu;
    }
...
private void someMethod() {
...
    if (mMenu != null) {
       MenuItem item = mMenu.findItem(R.id.new_track);
       if (item != null) {
            item.setVisible(false);
            ActivityCompat.invalidateOptionsMenu(this.getActivity());
        }
    }
...
}

Tôi someMethod()nhận được cuộc gọi từ nhiều nơi, thậm chí trước đó onCreateOptionsMenu(), vì vậy tôi phải kiểm tra mMenu != null.


0

Điều này sẽ trả về true nếu API cao hơn hoặc bằng 11 và do đó được hỗ trợ. Trước API 11, menu được vẽ khi nhấn nút menu nên không cần phương pháp này vì nó diễn ra tự động.


1
Tôi cần cập nhật các mục menu mà không cần người dùng tương tác với nút menu. Hãy tưởng tượng rằng người dùng để menu mở trong khi tác vụ không đồng bộ của tôi đang chạy ... Với phương pháp, các lần lặp menu được cập nhật tự động trong api 11+. Nếu tôi loại bỏ nó, nó không hoạt động. Nhưng tôi vẫn cần phải cập nhật tự động của trình đơn itens trong api android <11.
SnitramSD

2
Khi các tác vụ không đồng bộ của tôi kết thúc, tôi thực hiện dòng ActivityCompat.invalidateOptionsMenu (MainActivity.this); để cập nhật các lần lặp menu. Nhưng nó chỉ hoạt động trong api 11+. Làm cách nào để buộc cập nhật các mục menu trong api <11 mà không có sự tương tác của người dùng với nút menu (một cái gì đó tương tự như ActivityCompat.invalidateOptionsMenu (MainActivity.this); trong api <11)?
SnitramSD 23/12/12

Khá nhiều bằng cách lập trình nhấn nút menu hai lần trên thiết bị <11.
AndroidPenguin 23/12/12
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.