Saya mencoba menambahkan item ke menu opsi dari sekelompok fragmen.
Saya telah membuat yang baru MenuFragment
kelas dan memperluas ini untuk fragmen yang saya ingin sertakan item menu masuk. Berikut adalah kode:
Jawa:
public class MenuFragment extends Fragment {
MenuItem fav;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setHasOptionsMenu(true);
}
public void onCreateOptionsMenu(Menu menu, MenuInflater inflater) {
fav = menu.add("add");
fav.setIcon(R.drawable.btn_star_big_off);
}
}
Kotlin:
class MenuFragment : Fragment {
lateinit var fav: MenuItem
override fun onCreate(savedInstanceState: Bundle) {
super.onCreate(savedInstanceState)
setHasOptionsMenu(true)
}
override fun onCreateOptionsMenu(menu: Menu, inflater: MenuInflater) {
fav = menu.add("add");
fav.setIcon(R.drawable.btn_star_big_off);
}
}
Untuk beberapa alasan onCreateOptionsMenu
tampaknya tidak berjalan.
android
android-fragments
android-optionsmenu
misterbassman
sumber
sumber
Jawaban:
Panggil metode super:
Jawa:
Kotlin:
Masukkan pernyataan log dalam kode untuk melihat apakah metode ini tidak dipanggil atau jika menu tidak diubah oleh kode Anda.
Juga memastikan Anda menelepon
setHasOptionsMenu(boolean)
dionCreate(Bundle)
untuk memberitahu fragmen yang harus berpartisipasi dalam penanganan pilihan menu.sumber
Saya memiliki masalah yang sama, tetapi saya pikir lebih baik merangkum dan memperkenalkan langkah terakhir untuk membuatnya bekerja:
Tambahkan metode setHasOptionsMenu (true) dalam metode Fragment Anda
onCreate(Bundle savedInstanceState)
.Ganti
onCreateOptionsMenu(Menu menu, MenuInflater inflater)
(jika Anda ingin melakukan sesuatu yang berbeda di menu Fragmen Anda) danonOptionsItemSelected(MenuItem item)
metode di Fragmen Anda.Di dalam
onOptionsItemSelected(MenuItem item)
metode Aktivitas Anda , pastikan Anda mengembalikan false ketika tindakan item menu akan diterapkan dalamonOptionsItemSelected(MenuItem item)
metode Fragment.Sebuah contoh:
Aktivitas
Pecahan
sumber
setHasOptionsMenu(true);
Terima kasihJika Anda menemukan
onCreateOptionsMenu(Menu menu, MenuInflater inflater)
metode ini tidak dipanggil, pastikan Anda memanggil yang berikut dari metode FragmentonCreate(Bundle savedInstanceState)
:sumber
Toolbar
dan memanggilsetHasOptionsMenu(true)
dionCreateView()
bukannyaonCreate()
untuk menyelesaikannya.Jika Anda perlu
menu
menyegarkan bagianwebview
dalam tertentuFragment
, Anda dapat menggunakan:Fragmen :
menu.xml
sumber
TL; DR
Gunakan
android.support.v7.widget.Toolbar
dan lakukan saja:Toolbar Mandiri
Sebagian besar solusi yang disarankan seperti
setHasOptionsMenu(true)
hanya berfungsi ketika Aktivitas induk memiliki Bilah Alat di tata letaknya dan mendeklarasikannya melaluisetSupportActionBar()
. Kemudian Fragmen dapat berpartisipasi dalam populasi menu dari ActionBar yang tepat ini :Jika Anda menginginkan toolbar dan menu mandiri untuk satu Fragmen spesifik, Anda dapat melakukan hal berikut:
menu_custom_fragment.xml
custom_fragment.xml
CustomFragment.kt
Ya itu mudah. Anda bahkan tidak perlu mengganti
onCreate()
atauonCreateOptionsMenu()
.PS: Ini hanya bekerja dengan
android.support.v4.app.Fragment
danandroid.support.v7.widget.Toolbar
(juga pastikan untuk menggunakanAppCompatActivity
danAppCompat
tema di Andastyles.xml
).sumber
Dalam
menu.xml
Anda harus menambahkan semua item menu. Kemudian Anda dapat menyembunyikan item yang tidak ingin Anda lihat di pemuatan awal.menu.xml
Tambahkan
setHasOptionsMenu(true)
metode onCreate () untuk memanggil item menu di kelas Fragment Anda.FragmentClass.java
Anda tidak perlu mengganti
onCreateOptionsMenu
kelas Fragment Anda lagi. Item menu dapat diubah (Tambah / hapus) dengan menggantionPrepareOptionsMenu
metode yang tersedia di Fragment.sumber
Anda perlu menggunakan menu.clear () sebelum menggembungkan menu.
dan
sumber
Dalam kasus saya, berikut adalah langkah-langkahnya.
Langkah 1
Langkah 2
Langkah-3
sumber
menu.clear()
menu yang sudah dihapus sebelumnya. Bekerja untuk saya :)Jika Anda ingin menambahkan menu kustom Anda
sumber
Saya memiliki masalah yang sama, fragmen saya adalah halaman-halaman ViewPager. Alasan hal itu terjadi adalah karena saya menggunakan manajer fragmen anak daripada manajer fragmen dukungan aktivitas saat instantiating FragmentPagerAdapter.
sumber
File menu:
Kode aktivitas:
Kode fragmen:
sumber
Kode Anda baik-baik saja. Hanya super yang hilang dalam metode:
sumber
Saya menjadi gila karena tidak ada jawaban di sini yang bekerja untuk saya.
Untuk menunjukkan menu yang harus saya panggil:
setSupportActionBar(toolbar)
Selesai!
Catatan: jika
toolbar
tampilan Anda tidak dalam tata letak aktivitas yang sama Anda tidak dapat menggunakan panggilan di atas langsung dari kelas aktivitas Anda, dalam hal ini Anda harus mendapatkan aktivitas itu dari kelas fragmen Anda dan kemudian memanggilsetSupportActionBar(toolbar)
. Mengingat: kelas aktivitas Anda harus memperluas AppCompatActivity.Semoga jawaban ini membantu Anda.
sumber
Pengaturan menu opsi setelah membuat tampilan fragmen bekerja dengan baik untuk saya.
sumber
Masalah saya sedikit berbeda. Saya melakukan segalanya dengan benar. Tetapi saya mewarisi kelas yang salah untuk aktivitas yang menampung fragmen tersebut.
Jadi untuk menjadi jelas, jika Anda menimpa
onCreateOptionsMenu(Menu menu, MenuInflater inflater)
fragmen, pastikan kelas aktivitas Anda yang menjadi tuan rumah fragmen iniandroid.support.v7.app.ActionBarActivity
(jika Anda ingin mendukung di bawah API level 11).Saya mewarisi
android.support.v4.app.FragmentActivity
untuk mendukung level API di bawah 11.sumber
Satu hal yang akan saya tambahkan ke sini dan alasan itu tidak berhasil untuk saya.
Ini mirip dengan jawaban Napster.
Pastikan aktivitas hosting fragmen Anda meluas
AppCompatActivity
, tidakFragmentActivity
!Dari Dokumentasi Referensi Google untuk FragmentActivity:
Untuk memperbarui jawaban Napster -
ActionBarActivity
sekarang sudah tidak digunakan lagi, gunakanAppCompatActivity
saja.Saat menggunakan
AppCompatActivity
, pastikan juga Anda mengatur "tema aktivitasTheme.AppCompat
atau tema serupa" (Google Doc).Catatan:
android.support.v7.app.AppCompatActivity
adalah subclass dariandroid.support.v4.app.FragmentActivity
kelas (lihat AppCompatActivity ref doc).sumber
Di folder menu Anda, buat file .menu xml dan tambahkan xml ini
Di kelas fragmen Anda, overide metode ini dan
Sekarang hanya mengatur file xml menu Anda di kelas fragmen
sumber
Jika semua hal di atas tidak berfungsi, Anda perlu men-debug dan memastikan fungsi onCreateOptionsMenu telah dipanggil (dengan menempatkan debug atau menulis log ...)
Jika tidak berjalan, mungkin tema Android Anda tidak mendukung bilah tindakan. Buka AndroidManifest.xml dan tetapkan nilai untuk
android:theme
dengan bilah tindakan dukungan tema :sumber
pada metode onCreate Anda, tambahkan setHasOptionMenu ()
Kemudian timpa onCreateOptionsMenu Anda
sumber