Dapatkan MenuItem
menunjuk ke item tersebut, panggil setVisible
untuk menyesuaikan visibilitasnya dan kemudian panggil invalidateOptionsMenu()
aktivitas Anda sehingga menu ActionBar disesuaikan.
Pembaruan: A MenuItem
bukan tampilan biasa yang merupakan bagian dari tata letak Anda. Sesuatu yang istimewa, sangat berbeda. Kode Anda kembali null
untuk item
dan itu menyebabkan crash. Yang Anda butuhkan adalah melakukan:
MenuItem item = menu.findItem(R.id.addAction);
Berikut adalah urutan di mana Anda harus memanggil: panggilan pertama invalidateOptionsMenu()
dan kemudian di dalam onCreateOptionsMenu(Menu)
memperoleh referensi ke MenuItem (dengan memanggil menu.findItem()
) dan panggilan setVisible()
di atasnya
MenuItem
mungkinnull
karena Anda menggunakangetItem
alih-alihfindItem
. Kami tidak akan pernah tahu, tanpa melihat kode dan log kerusakan Anda.onCreateOptionsMenu
, dan atur visibilitas item pada saat itu. Atau simpan referensi di sekitar sampai Anda memutuskan apakah itu akan terlihat atau tidak.invalidateOptionsMenu()
dan kemudian di dalamonCreateOptionsMenu(Menu)
mendapatkan referensi keMenuItem
(dengan memanggilmenu.findItem()
) dan memanggilnyasetVisible()
. Jawaban oleh suhas_sm dan oleh P1r4nh4 menyajikan pendekatan yang benar.Ditemukan tambahan untuk pertanyaan ini:
Jika Anda ingin mengubah visibilitas item menu Anda saat bepergian, Anda hanya perlu mengatur variabel anggota dalam aktivitas Anda untuk mengingat bahwa Anda ingin menyembunyikan menu dan memanggil
invalidateOptionsMenu()
dan menyembunyikan item dalamonCreateOptionsMenu(...)
metode yang diganti .Dalam contoh saya, saya telah menyembunyikan semua item.
sumber
if (HIDE_MENU) { return false; } else { getSupportMenuInflater().inflate(R.menu.menu_settings, menu); return true; }
Status dokumen: "Anda harus mengembalikan true untuk menu yang akan ditampilkan; jika Anda mengembalikan false, itu tidak akan ditampilkan".onPrepareOptionsMenu()
harus digunakan untuk logika tampilkan / sembunyikan alih-alihonCreateOptionsMenu()
karena hanya dipanggil satu kali sehingga tidak berguna jika Anda ingin mengubah item menu setelah inisialisasi. Jadi mengembang di onCreate, tetapi tampilkan / sembunyikan di onPrepare.Iya.
invalidateOptionsMenu()
ketika Anda ingin menyembunyikan opsi. Ini akan memanggilonCreateOptionsMenu()
.onCreateOptionsMenu()
, periksa bendera / kondisi dan perlihatkan atau sembunyikan dengan cara berikut:sumber
invalidateOptionsMenu
bukaninvalidateOptions
?onCreateOptionsMenu
Anda dapat memanggil ini:
Memperbarui:
Pastikan kode Anda tidak kembali
null
untukitem
atau mungkin kecelakaan aplikasi.sumber
Saya mencari jawaban dengan konteks yang lebih sedikit. Sekarang saya sudah menemukan jawabannya, saya akan menambahkan jawaban itu.
Sembunyikan tombol secara default di menu xml
Secara default tombol share akan disembunyikan, seperti yang ditetapkan oleh
android:visible="false"
.main_menu.xml
Tampilkan tombol dalam kode
Tetapi tombol share dapat ditampilkan berdasarkan kondisi tertentu.
MainActivity.java
Lihat juga
sumber
invalidateOptionsMenu()
untuk menyegarkan menu.tidak bekerja untuk saya. Saya harus secara eksplisit menggunakan
onPrepareOptionsMenu
untuk mengatur item tidak terlihat.Jadi gunakan
onCreateOptionsMenu
untuk membuat menu danonPrepareOptionsMenu
untuk mengubah visibilitas dll.sumber
onPrepareOptionsMenu
sepertinya tempat yang tepat untuk melakukan jenis operasi ini: "Siapkan menu opsi standar Layar untuk ditampilkan. Ini disebut tepat sebelum menu ditampilkan, setiap kali ditampilkan Anda dapat menggunakan metode ini untuk mengaktifkan / menonaktifkan item secara efisien atau memodifikasi konten secara dinamis. "invalidateOptionsMenu()
untuk menyegarkan menu.Awalnya atur visibilitas item menu ke false dalam file tata letak menu sebagai berikut:
Anda kemudian dapat dengan mudah mengatur visibilitas item menu ke false di onCreateOptionsMenu () Anda setelah menggembungkan menu.
sumber
Coba ini:
sumber
Ini bekerja untuk saya dari Aktivitas dan Fragmen
sumber
Jawaban P1r4nh4 berfungsi dengan baik, saya hanya menyederhanakannya menggunakan flag boolean:
sumber
0
dan1
bukan "boolean flag", ini pseudo-boolean. selain itu, tidak ada alasan untuk menggunakan boolean yang sebenarnya di sini.Menurut situs Resmi Pengembang Android, OnCreateOptionMenu (Menu menu) tidak direkomendasikan untuk mengubah item menu atau ikon, visibilitas..etc di Runtime.
Seperti yang Disarankan Anda dapat menggunakan ini pada PilihanPilih yang Terpilih (item MenuItem) metode input untuk melacak input pengguna.
Jika Anda perlu mengubah Item Menu saat Run, Anda dapat menggunakan onPrepareOptionsMenu (menu Menu) untuk mengubahnya
sumber
setVisible(false)
untuk item selalu terlihat, itu tidak hilang sampai saya klik pada tiga titik (Menu itu sendiri). Jika saya menggunakaninvalidateOptionsMenu()
dionPrepareOptionsMenu
item segera mereorganisasi sendiri, tetapi mereka kehilangan tindakan mereka (jika saya klik pada item apapun, itu tidak apa-apa).setel nilai ke variabel dan panggil invalidateOptionsMenu ();
sebagai contoh
sumber
setVisible(false)
untuk item selalu terlihat, itu tidak hilang sampai saya klik pada tiga titik (Menu itu sendiri). Jika saya menggunakaninvalidateOptionsMenu()
dionPrepareOptionsMenu
item segera mereorganisasi sendiri, tetapi mereka kehilangan tindakan mereka (jika saya klik pada item apapun, itu tidak apa-apa).Anda dapat menggunakannya
toolbar.getMenu().clear();
untuk menyembunyikan semua item menu sekaligussumber
Dengan mengatur Visibilitas semua item dalam Menu, menu appbar atau menu overflow akan menjadi Sembunyikan secara otomatis
Contoh
...
...
Sebelum pergi ke bagian lain, gunakan kode di bawah ini:
sumber
https://stackoverflow.com/a/21215280/466363 - dijawab oleh Look Alterno dan Sufian
.
ActivityCompat.invalidateOptionsMenu () tidak memanggil balik onPrepareOptionsMenu (); itu hanya memperbarui menu secara langsung.
SomeMethod () saya dipanggil dari beberapa tempat, bahkan sebelum onCreateOptionsMenu (), jadi saya harus memeriksa mMenu! = Null.
sumber
Jika Anda melakukan semuanya seperti pada jawaban di atas, tetapi item menu masih terlihat, periksa apakah Anda merujuk ke sumber daya yang unik . Misalnya, di onCreateOptionsMenu atau onPrepareOptionsMenu
Ctrl + Klik R.id.menu_open dan periksa bahwa itu ada hanya dalam satu file menu. Jika sumber ini sudah digunakan di mana saja dan dimuat dalam suatu kegiatan, ia akan mencoba bersembunyi di sana.
sumber
Cara terbaik untuk menyembunyikan semua item dalam menu hanya dengan satu perintah adalah menggunakan "grup" pada xml menu Anda. Cukup tambahkan semua item menu yang akan ada di menu overflow Anda di dalam grup yang sama.
Dalam contoh ini kami memiliki dua item menu yang akan selalu ditampilkan (item reguler dan pencarian) dan tiga item melimpah:
Kemudian, pada aktivitas Anda (lebih disukai di onCreateOptionsMenu), gunakan perintah setGroupVisible untuk mengatur semua visibilitas item menu menjadi false atau true.
Jika Anda ingin menggunakan perintah ini di tempat lain di aktivitas Anda, pastikan untuk menyimpan kelas menu ke lokal, dan selalu periksa apakah menu nol, karena Anda dapat mengeksekusi sebelum createOptionsMenu:
sumber
Bagi mereka yang menggunakan pustaka Appcompat: Jika Aktivitas Anda mensubklasifikasikan ActionBarActivity, Anda dapat menghubungi supportInvalidateOptionsMenu ()
Terlihat di sini: https://stackoverflow.com/a/19649877/1562524
sumber
Saya pikir pendekatan yang lebih baik adalah dengan menggunakan variabel anggota untuk menu, menginisialisasi di onCreateOptionsMenu () dan hanya menggunakan setVisible () sesudahnya, tanpa membatalkan pilihan menu.
sumber
kode ini bekerja untuk saya
sumber
Pendekatan ini bekerja untuk saya:
sumber
Anda mencoba mengakses item menu dari suatu aktivitas, yang tidak memiliki akses ke cakupan. Panggilan untuk menemukan item menu akan kembali nol , karena tampilan tidak terikat dengan aktivitas maupun tata letak tempat Anda menelepon.
Item menu diikat dengan item seperti " Bar Navigasi " yang pada gilirannya diikat dengan aktivitas yang sesuai.
Jadi inisialisasi pandangan-pandangan tersebut dalam aktivitas (), dan kemudian mengakses item menu yang menyertai tampilan itu.
sumber
menggunakan
invalidateOptionsMenu()
untuk menelepon
onPrepareOptionsMenu(menu: Menu?)
https://developer.android.com/guide/topics/ui/menus
sumber
sumber