Tengo una barra de herramientas, así como un cajón de navegación. Cuando inicio mi aplicación, la barra de herramientas de navegación y el cajón se crean. Cuando hago clic en los elementos en el cajón de navegación, empieza de nuevo los fragmentos y mantiene la misma barra de herramientas. ¿Cómo puedo básicamente agregar elementos de menú la barra de herramientas, tales como buscar, añadir, editar cuando empiezo a fragmentos específicos? No quiero que en el inicio del programa, pero se crea de forma dinámica. Además, ¿cómo iba a ser capaz de hacer clic en estos botones y tiene en marcha otros fragmentos. Yo lo quiero así, en un fragmento, en el botón editar de la barra de herramientas de una cosa específica en comparación con el botón editar 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"
/>
InformationsquelleAutor Joe Eigi | 2015-06-09

7 Comentarios

  1. 130

    Agregar un código similar para 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 usted puede personalizar el menú para sus fragmentos.

    • Esta es la respuesta correcta porque la llamada setHasOptionsMenu(verdadero) es necesario para el método onCreateOptionsMenu que se llama en el fragmento.
    • Recuerde, llamando a los menu.clear() en onCreateOptionsMenu – de lo contrario va a heredar el menú de los padres, también.
    • donde pongo el código para desactivar? Fragmento o Actividad señor, yo no soy de ver menuitem en mi fragmento
  2. 30

    Esta es la forma de menú crear de forma dinámica:
    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);
    • uso actionBarToolbar.setOnMenuItemClickListener() para manejar el elemento de menú de acciones. onOptionsItemSelected() no se llama en esta situación.
    • dado el vínculo no es más
  3. 20

    La mejor manera de hacerlo :

    1. Barra de herramientas buscar en la Actividad y establecer como supportActionBar.

    Toolbar actionBarToolBar = (Toolbar) findViewById(R.id.my_toobar);
    setSupportActionBar(actionBarToolBar);

    2. Entonces será un pedazo de pastel para manejar los menús de opciones para los diferentes fragmentos a través de una misma Actividad.
    Hacer las siguientes cosas en cada fragmento como desee:

    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 administrar elementos de 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);
        }
    }
  4. 7

    Reemplazar onCreateOptionsMenu método en el que cada fragmento.

    @Override
    public void onCreateOptionsMenu(Menu menu, MenuInflater inflater) {
        inflater.inflate(R.menu.your_menu_xml, menu);
        super.onCreateOptionsMenu(menu, inflater);
    }
    • Por qué quieres diferentes barra de herramientas? Se pueden establecer diferentes de título y de los menús.
    • sí, usted puede tener menú personalizado inflando menú personalizado xml. Llame setTitle() puede añadir títulos.
    • Parece que consiguió el contexto equivocado, echar un vistazo a esto: stackoverflow.com/questions/26998455/…
    • Me di la actionbar en mi manifiesto, pero todavía se muestra en mi actividad de diseño por encima de la barra de herramientas. ¿Cómo puedo deshacerme de este
    • Sí, hice eso y todavía se muestra en mi diseño, pero se mueve fuera de la vista
    • Que werid. Escribir Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar);setSupportActionBar(toolbar); ?

  5. 4

    Lo resuelto los problemas correctamente. Mi solución es la 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);
    }
    • Sí, me mostró el menú correctamente. Pero cómo ocultar este menú en el fragmento de cerca, me refiero a Cuando se cambie a otro fragmento, por ejemplo, de un -> b, el menú de un todavía visible en la barra de herramientas del fragmento b.
    • uso setHasOptionsMenu(falso) en onCreateView de fragmento b.
  6. 2

    Tuve el mismo problema y quería reemplazar la barra de herramientas del menú, en consecuencia, para el fragmento muestra.

    El problema que estoy ahora enfrenta es que el menú se agrega a la anterior.

    Con el fin de mostrar sólo el menú para el 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 te ayudarán.

    • menú.claro, pueden causar puntero nulo
    • compruebe si el menú != null antes de llamar a la .clear()
  7. 1

    A continuación son los pasos para mostrar las diferentes opciones de menú con diferentes fragmentos.

    Paso 1: Llame setHasOptionsMenu(true)

    override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
            setHasOptionsMenu(true)
            super.onViewCreated(view, savedInstanceState)
    
        }

    Paso 2: Inflar su fragmento de la opción en relación con los elementos de menú.

    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)
    }
    • Esto me ayudó a eliminar no deseado botón de menú que apareció en mi nuevo menú

Dejar respuesta

Please enter your comment!
Please enter your name here