Saya mencoba mengubah judul item menu dari luar onOptionsItemSelected(MenuItem item)
metode.
Saya sudah melakukan yang berikut;
public boolean onOptionsItemSelected(MenuItem item) {
try {
switch(item.getItemId()) {
case R.id.bedSwitch:
if(item.getTitle().equals("Set to 'In bed'")) {
item.setTitle("Set to 'Out of bed'");
inBed = false;
} else {
item.setTitle("Set to 'In bed'");
inBed = true;
}
break;
}
} catch(Exception e) {
Log.i("Sleep Recorder", e.toString());
}
return true;
}
namun saya ingin dapat mengubah judul item menu tertentu di luar metode ini.
Jawaban:
Seperti yang disarankan JxDarkAngel, menyebutnya dari mana saja dalam Aktivitas Anda ,
dan kemudian mengesampingkan:
adalah pilihan yang jauh lebih baik. Saya menggunakan jawaban dari https://stackoverflow.com/a/17496503/568197
sumber
onPrepareOptionsMenu()
ini cukup sering dipanggil oleh kerangka kerja Android, misalnya saat menampilkan Aktivitas dan setiap kali menu ditampilkan. Jadi ini mungkin tidak terlalu efisien, jika menu Anda tidak terlalu sering berubah.invalidateOptionsMenu()
juga akan menelepononCreateOptionsMenu()
, sehingga Anda dapat memasukkan logika pembaruanonCreateOptionsMenu()
.Saya akan menyarankan menyimpan referensi dalam aktivitas ke objek Menu yang Anda terima di onCreateOptionsMenu dan kemudian menggunakannya untuk mengambil MenuItem yang memerlukan perubahan saat dan ketika Anda membutuhkannya. Misalnya, Anda dapat melakukan sesuatu di sepanjang baris berikut ini:
Atau, Anda dapat mengganti onPrepareOptionsMenu untuk memperbarui item menu setiap kali menu ditampilkan.
sumber
Anda dapat melakukan ini dengan membuat objek "Menu" global kemudian menetapkannya di onCreateOptionMenu
kemudian tetapkan di sini
Kemudian, gunakan objek Menu yang ditetapkan untuk mendapatkan item yang diperlukan
sumber
Buat metode setOptionsTitle () dan setel bidang di kelas Anda. Seperti:
...
Sekarang ketika menu terisi, ubah judul menjadi apa pun status Anda:
sumber
Anda lebih baik menggunakan override onPrepareOptionsMenu
Berikut sebuah contoh
sumber
Saya menggunakan kode ini untuk menyesuaikan item navigasi bawah saya
sumber
Nyatakan bidang menu Anda.
Berikut ini adalah metode onCreateOptionsMenu ()
Mengikuti akan menjadi aktivitas setter nama Anda. Baik melalui klik tombol atau melalui kode kondisional
Ini berhasil untuk saya.
sumber
Sepertinya saya ingin mengubah konten menu di dalam metode lokal, dan metode ini dipanggil kapan saja, setiap kali suatu peristiwa terjadi, atau di utas aktivitas UI.
Mengapa Anda tidak mengambil instance Menu dalam variabel global di onPrepareOptionsMenu ketika ini ditimpa dan digunakan dalam metode Anda ini. Pastikan bahwa metode ini dipanggil setiap kali suatu peristiwa terjadi (seperti klik tombol), atau di utas aktivitas UI, handler atau tugas-tugas async pasca-eksekusi.
Anda harus tahu sebelumnya indeks item menu ini yang ingin Anda ubah. Setelah menghapus menu, Anda perlu mengembang menu XML dan memperbarui nama atau ikon item Anda.
sumber
Bagi orang yang membutuhkan judul diatur secara statis. Ini dapat dilakukan di AndroidManifest.xml
sumber
Saya perlu mengubah ikon menu untuk fragmen. Saya sedikit mengubah jawaban Charles untuk pertanyaan ini:
sumber