studio - menu android
Barra de herramientas de Android Agregar elementos de menĂº para diferentes fragmentos (7)
Tengo una barra de herramientas y un cajón de navegación. Cuando inicio mi aplicación, se crean la barra de herramientas y el cajón de navegación. Cuando hago clic en elementos en el cajón de navegación, comienza nuevos fragmentos y mantiene la misma barra de herramientas. ¿Cómo agrego básicamente elementos de menú a la barra de herramientas, como buscar, agregar, editar cuando inicio fragmentos específicos? No los quiero al inicio del programa, sino que se crean dinámicamente. Además, ¿cómo podría hacer clic en estos botones y hacer que inicien otros fragmentos? Lo quiero así, en un fragmento, el botón de edición en la barra de herramientas hace algo específico en comparación con el botón de edición en otro fragmento. ¡Gracias!
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"/>
Barra de herramientas:
<?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"
/>
A continuación se detallan los pasos para mostrar diferentes opciones de menú con diferentes fragmentos.
Paso 1: llame a setHasOptionsMenu (verdadero)
override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
setHasOptionsMenu(true)
super.onViewCreated(view, savedInstanceState)
}
Paso 2: Infle los elementos del menú de opciones relacionadas con su fragmento.
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)
}
Agregue código similar a sus fragmentos:
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup parent, Bundle savedInstanceState)
{
View v = inflater.inflate(R.layout.library_fragment, parent, false);
setHasOptionsMenu(true);
return v;
}
@Override
public void onCreateOptionsMenu(Menu menu, MenuInflater inflater) {
inflater.inflate(R.menu.your_menu_xml, menu);
super.onCreateOptionsMenu(menu, inflater);
}
De esta manera, puede personalizar el menú para sus fragmentos.
Así es como se crea el menú dinámicamente: http://www.101apps.co.za/index.php/articles/using-toolbars-in-your-apps.html
Editado:
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);
La mejor manera de hacerlo:
1. Busque la barra de herramientas en Actividad y configúrela como supportActionBar.
Toolbar actionBarToolBar = (Toolbar) findViewById(R.id.my_toobar);
setSupportActionBar(actionBarToolBar);
2. Entonces será fácil manejar menús de opciones para diferentes fragmentos en una misma Actividad. Haz lo siguiente en cada fragmento como quieras:
En la llamada al método OnCreateView
setHasOptionsMenu(true);
Y por último,
@Override
public void onCreateOptionsMenu(Menu menu, MenuInflater inflater) {
inflater.inflate(R.menu.main, menu);
super.onCreateOptionsMenu(menu, inflater);
}
Y para administrar los elementos del menú, haga clic en, tenemos 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);
}
}
Resolví estos problemas correctamente. Mi solución es el siguiente código:
@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);
}
Tuve el mismo problema y quería reemplazar el menú de la barra de herramientas de acuerdo con el fragmento que se muestra.
El problema que estoy enfrentando ahora es que el menú se agrega al anterior.
Para mostrar solo el menú del fragmento, sugiero:
@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);
}
Espero que ayude.
onCreateOptionsMenu
método
onCreateOptionsMenu
en cada uno de sus fragmentos.
@Override
public void onCreateOptionsMenu(Menu menu, MenuInflater inflater) {
inflater.inflate(R.menu.your_menu_xml, menu);
super.onCreateOptionsMenu(menu, inflater);
}