Bagaimanapun, dokumentasi mencakup semua hal.
Mengubah item menu saat runtime
Setelah aktivitas dibuat,
onCreateOptionsMenu()
metode ini dipanggil hanya sekali, seperti dijelaskan di atas. Sistem menyimpan dan menggunakan kembali yang Menu
Anda tetapkan dalam metode ini hingga aktivitas Anda dihancurkan. Jika Anda ingin mengubah Menu Opsi kapan saja setelah pertama kali dibuat, Anda harus mengganti onPrepareOptionsMenu()
metode. Ini memberi Anda objek Menu seperti yang ada saat ini. Ini berguna jika Anda ingin menghapus, menambah, menonaktifkan, atau mengaktifkan item menu tergantung pada kondisi aplikasi Anda saat ini.
Misalnya
@Override
public boolean onPrepareOptionsMenu (Menu menu) {
if (isFinalized) {
menu.getItem(1).setEnabled(false);
// You can also use something like:
// menu.findItem(R.id.example_foobar).setEnabled(false);
}
return true;
}
Pada Android 3.0 dan lebih tinggi, menu opsi dianggap selalu terbuka ketika item menu disajikan di panel tindakan. Ketika suatu peristiwa terjadi dan Anda ingin melakukan pembaruan menu, Anda harus menelepon invalidateOptionsMenu()
untuk meminta panggilan sistem onPrepareOptionsMenu()
.
setEnable()
tidak mengubah apa yang terjadi ketika Anda menekan menu ini tetapi tidak mengubah tampilannya (apa yang salah, pengembang Android?). Jadi lebih jelas untuk menonaktifkan dan mengubah judul, atau lebih baik buat yangMenuItem
tidak terlihat.false
untuk menonaktifkan menu sepenuhnya.Pada semua versi Android, cara termudah: gunakan ini untuk MENUNJUKKAN ikon tindakan menu sebagai dinonaktifkan DAN menjadikannya FUNGSI juga dinonaktifkan:
sumber
Anda bisa menyimpan item sebagai variabel saat membuat menu opsi dan kemudian mengubah propertinya sesuka hati.
sumber
onPrepareOptionsMenu
?menyederhanakan versi @Vikas
sumber
Cara memperbarui menu saat ini untuk mengaktifkan atau menonaktifkan item ketika AsyncTask dilakukan.
Dalam kasus penggunaan saya, saya perlu menonaktifkan menu saya ketika AsyncTask saya sedang memuat data, kemudian setelah memuat semua data, saya perlu mengaktifkan semua menu lagi agar pengguna dapat menggunakannya.
Ini mencegah aplikasi untuk membiarkan pengguna mengklik item menu saat data sedang dimuat.
Pertama, saya mendeklarasikan variabel status, jika variabelnya adalah 0 maka menu akan ditampilkan, jika variabel itu adalah 1 maka menu akan disembunyikan.
Kemudian di saya,
onCreateOptionsMenu()
saya memeriksa variabel ini, jika 1 saya menonaktifkan semua item saya, jika tidak, saya hanya menunjukkan semuanyaSekarang, ketika Aktivitas saya dimulai,
onCreateOptionsMenu()
akan dipanggil sekali saja, dan semua barang saya akan hilang karena saya mengatur keadaan untuk mereka di awal.Lalu saya membuat AsyncTask Di mana saya mengatur variabel status ke 0 di saya
onPostExecute()
Langkah ini sangat penting!
Ketika Anda memanggilnya
invalidateOptionsMenu();
akan diluncurkan kembalionCreateOptionsMenu();
Jadi, setelah mengatur status saya ke 0, saya hanya menggambar ulang semua menu tapi kali ini dengan variabel saya pada 0, yang mengatakan, semua menu akan ditampilkan setelah semua proses asinkron dilakukan, dan kemudian pengguna saya dapat menggunakan menu .
Hasil
sumber
solusi terbaik saat Anda tampil di laci navigasi
sumber
Jawaban yang lebih modern untuk pertanyaan lama:
MainActivity.kt
menu_main_activity.xml
menu_item_icon_selector.xml
attrs.xml
styles.xml or themes.xml
sumber
sumber
Apa yang saya lakukan adalah menyimpan referensi ke Menu di
onCreateOptionsMenu
. Ini mirip dengan jawaban nir kecuali alih-alih menyimpan setiap item, saya menyimpan seluruh menu.Deklarasikan Menu
Menu toolbarMenu;
.Kemudian di
onCreateOptionsMenu
simpan menu ke variabel AndaSekarang Anda dapat mengakses menu Anda dan semua itemnya kapan saja Anda mau.
toolbarMenu.getItem(0).setEnabled(false);
sumber
sumber
Jika terlihat menu
Jika sembunyikan menu
sumber
Secara umum dapat mengubah properti tampilan Anda di runtime:
lalu...
tapi
jika Anda ingin memodifikasi visibilitas opsi dari ContextMenu, pada tekan tombol Anda, Anda dapat mengaktifkan bendera, dan kemudian di onCreateContextMenu Anda dapat melakukan sesuatu seperti ini:
saya harap ini membantu
sumber
onCreateContextMenu
metode. Tapi saya ingin mengakses menu konteks dari metode ini.onCreateContextMenu
akan dipanggil hanya sekali, tetapi saya dapat mengklik tombol banyak waktu untuk mengaktifkan / menonaktifkan item menu.