Saya memiliki bilah alat serta laci navigasi. Saat saya memulai aplikasi saya, bilah alat dan panel samping navigasi dibuat. Saat saya mengklik item di panel samping navigasi, fragmen baru akan dimulai dan toolbar tetap sama. Bagaimana saya pada dasarnya menambahkan item menu ke toolbar seperti pencarian, tambah, edit ketika saya memulai fragmen tertentu? Saya tidak ingin mereka di awal program, tetapi dibuat secara dinamis. Juga, bagaimana saya bisa mengklik tombol-tombol ini dan meminta mereka memulai fragmen lain. Saya menginginkannya dalam satu fragmen, tombol edit di toolbar melakukan hal tertentu dibandingkan tombol edit di fragmen lain. Terima kasih!
Menu_toolbar:
<?xml version="1.0" encoding="utf-8"?>
<menu
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto">
<item android:id="@+id/edit"
android:orderInCategory="1"
android:title="Edit"
app:showAsAction="always"
android:icon="@drawable/pencil_icon"/>
<item android:id="@+id/add"
android:orderInCategory="1"
android:title="Add"
app:showAsAction="always"
android:icon="@drawable/plus_icon"/>
Toolbar:
<?xml version="1.0" encoding="utf-8"?>
<android.support.v7.widget.Toolbar
xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/toolbar"
android:layout_width="match_parent"
android:layout_height="55dp"
android:background="#10a1ff"
android:title="Home"
/>
sumber
menu.clear()
dionCreateOptionsMenu
- jika tidak Anda akan mewarisi menu dari orangtua, juga.Beginilah cara membuat menu secara dinamis: http://www.101apps.co.za/index.php/articles/using-toolbars-in-your-apps.html
Diedit:
Toolbar actionBarToolBar = (Toolbar) findViewById(R.id.my_toobar); setSupportActionBar(actionBarToolBar); actionBarToolBar.setNavigationIcon(R.drawable.icon); actionBarToolBar.setNavigationContextDescription(getResources().getString(R.string.desc); actionBarToolBar.setLogo(R.drawable.other_icon); actionBarToolBar.setLogoDescription(getResources().getString(R.string.other_desc); actionBarToolBar.inflateMenu(R.menu.fragment_menu);
sumber
actionBarToolbar.setOnMenuItemClickListener()
untuk menangani tindakan item menu.onOptionsItemSelected()
tidak dipanggil dalam situasi ini.Cara terbaik untuk melakukannya:
1. Temukan toolbar di Activity dan setel sebagai supportActionBar.
Toolbar actionBarToolBar = (Toolbar) findViewById(R.id.my_toobar); setSupportActionBar(actionBarToolBar);
2. Maka akan menjadi sangat mudah untuk menangani menu opsi untuk fragmen yang berbeda di atas Aktivitas yang sama. Lakukan hal-hal berikut di setiap fragmen sesuai keinginan Anda:
Dalam panggilan Metode OnCreateView
setHasOptionsMenu(true);
Dan terakhir,
@Override public void onCreateOptionsMenu(Menu menu, MenuInflater inflater) { inflater.inflate(R.menu.main, menu); super.onCreateOptionsMenu(menu, inflater); }
Dan untuk mengelola item menu klik, kami memiliki onOptionsItemSelected:
@Override public boolean onOptionsItemSelected(MenuItem item) { switch (item.getItemId()) { case R.id.action_search : Log.i("item id ", item.getItemId() + ""); default: return super.onOptionsItemSelected(item); } }
sumber
Ganti
onCreateOptionsMenu
metode di setiap fragmen Anda.@Override public void onCreateOptionsMenu(Menu menu, MenuInflater inflater) { inflater.inflate(R.menu.your_menu_xml, menu); super.onCreateOptionsMenu(menu, inflater); }
sumber
setTitle()
dapat menambahkan judul.Opsi paling sederhana adalah melakukannya
toolbar.inflateMenu(R.menu.fragment_menu);
sumber
Saya memecahkan masalah ini dengan benar. Solusi saya adalah sebagai kode berikut:
@Override public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { // Inflate the layout for this fragment mRootView = inflater.inflate(R.layout.fragment_order_history, container, false); //getActivity().invalidateOptionsMenu(); setHasOptionsMenu(true); return mRootView; } @Override public void onCreateOptionsMenu(Menu menu, MenuInflater inflater) { inflater.inflate(R.menu.main, menu); super.onCreateOptionsMenu(menu, inflater); }
sumber
Saya memiliki masalah yang sama dan saya ingin mengganti menu toolbar sesuai dengan fragmen yang ditampilkan.
Masalah yang saya hadapi sekarang adalah menu ditambahkan ke yang sebelumnya.
Untuk hanya menampilkan menu untuk fragmen, saya sarankan:
@Override public void onCreateOptionsMenu(Menu menu, MenuInflater inflater) { menu.clear(); //Empty the old menu inflater.inflate(R.menu.menu_fragment1, menu); super.onCreateOptionsMenu(menu, inflater); }
Semoga bisa membantu.
sumber
Berikut adalah langkah-langkah untuk menampilkan opsi menu berbeda dengan fragmen berbeda.
Langkah1: Panggil setHasOptionsMenu (true)
override fun onViewCreated(view: View, savedInstanceState: Bundle?) { setHasOptionsMenu(true) super.onViewCreated(view, savedInstanceState) }
Langkah2: Tingkatkan item menu opsi terkait fragmen Anda.
override fun onCreateOptionsMenu(menu: Menu?, inflater: MenuInflater?) { // To clear previously added menu items menu?.clear() inflater?.inflate(R.menu.your_fragment_menu, menu) super.onCreateOptionsMenu(menu, inflater) }
sumber
Di dalam XML tambahkan baris ini
app:menu="@menu/main_menu"
sumber
Menggunakan MaterialToolbar baru , sangat mudah untuk membuat menu tambahan dan digunakan untuk:
<com.google.android.material.appbar.MaterialToolbar android:id="@+id/toolbar" android:layout_width="0dp" android:layout_height="?attr/actionBarSize" app:navigationIcon="@drawable/ic_menu" app:menu="@menu/main_menu"/>
dan kemudian dalam kode untuk mengatur Pendengar OnCLick cukup tambahkan ini:
toolbar.setOnMenuItemClickListener { // .. DO SOMETHING HERE false }
sumber