Saya memiliki Aktivitas yang memiliki 2 fragmen. Keduanya adalah ListFragments dan keduanya berkontribusi MenuItems ke Menu. Saya memiliki satu MenuItem yang telah saya setel atribut android: showAsAction agar ditampilkan sebagai tombol di ActionBar. Yang bekerja dengan baik.
Sekarang MenuItem bergantung pada status. Ini adalah opsi menu Jeda / Lanjutkan untuk menjeda dan melanjutkan antrian. Masalah saya adalah saya tidak tahu bagaimana mengatur patung awalnya ketika Fragmen dibuat.
Keadaannya tergantung pada apakah antrian dijeda atau tidak. Jadi saya memiliki AsyncTask yang mendapatkan antrian dan menetapkan boolean (dihentikan sementara) berdasarkan status antrian. Saya memanggil onPrepareOptionsMenu untuk menyetel teks untuk item menu Jeda berdasarkan status antrian terakhir yang diketahui dan ini berfungsi dengan baik jika saya meninggalkan MenuItem di menu sebenarnya. Anda mengetuk ikon menu dan onPrepareOptionsMenu diaktifkan dan menu diperbarui sebelum ditampilkan.
Masalahnya adalah, jika saya meletakkan MenuItem yang sama di ActionBar (showAsAction), bagaimana saya bisa memaksanya untuk memperbarui tanpa harus memanggil onPrepareOptionsMenu? Saya harus dapat melakukan ini karena pada peluncuran pertama aplikasi, saya mengirim permintaan untuk mendapatkan antrian, tetapi tugas kembali setelah ActionBar disiapkan dan ditampilkan. Saya telah membuat penangan di fragmen saya yang dipanggil setiap kali saya mendapatkan pembaruan antrian, tetapi dari sana, bagaimana saya dapat memperbarui teks untuk MenuItem saya di ActionBar? Sepertinya saya tidak bisa menemukan cara untuk mendapatkan Menu yang saat ini disetel untuk memanipulasinya kecuali di onPrepareOptionMenu.
Rob W.
sumber
supportInvalidateOptionsMenu()
sajasupportInvalidateOptionsMenu()
sekarang tidak digunakan lagi; Anda dapat menggunakan dengan amaninvalidateOptionsMenu()
.dalam kasus saya:
invalidateOptionsMenu
hanya menyetel ulang teks ke yang asli, tetapi langsung mengakses item menu dan menulis ulang teks keinginan bekerja tanpa masalah:Karena komentar di bawah ini, saya dapat mengakses item menu melalui kode berikut:
sumber
mnuTopMenuActionBar_
?mnuTopMenuActionBar_
belum diinisialisasi, bukan? Bagaimana Anda mengatasinya?Untuk menyegarkan menu dari Fragment cukup panggil:
sumber
Saya telah menggunakan kode ini:
Dan bekerja seperti pesona bagi saya, Anda dapat menemukan OnPrepareOptionsMenu di sini
sumber
Pertama, harap ikuti dua baris kode untuk memperbarui item bilah tindakan sebelum Anda harus menyetel kondisi di oncreateOptionMenu (). Sebagai contoh:
sumber
Untuk kejelasan, saya pikir contoh langsung dari mengambil ke sumber daya dapat ditunjukkan dari berikut ini yang menurut saya berkontribusi pada tanggapan untuk pertanyaan ini dengan contoh langsung yang cepat.
Dalam hal ini Anda memegang referensi MenuItem di awal dan kemudian mengubah statusnya (untuk perubahan status ikon misalnya) pada titik waktu tertentu nanti.
sumber
Di Kotlin 1.2 cukup panggil:
dan
onCreateOptionsMenu
fungsinya akan dipanggil lagi.sumber