marcelofb
marcelofb

Reputation: 69

How to separate MainActivity menu options from Fragment menu options?

I have a Main Activity that controls 3 Fragments. The MainActivity has a searchbar and some filters on the options menu. The problem is that one of the fragments (ResultadosFragment) has its own implementation of OnCreateOptionsMenu(), where it inflates its own menu. What happens is that the options of both - the MainActivity and the Fragment - menus get mixed together in only one option menu.

Here's a screenshot:

enter image description here

MainActivity - OnCreateOptionsMenu()

@Override
public boolean onCreateOptionsMenu(final Menu menu) {
    super.onCreateOptionsMenu(menu);

    mOptionsMenu = menu;
    //Carrega o arquivo de menu.
    MenuInflater inflater = getMenuInflater();
    inflater.inflate(R.menu.menu_search_bar, menu);

    menu.findItem(R.id.usado).setChecked(true);
    menu.findItem(R.id.longplay).setChecked(true);
    menu.findItem(R.id.nacional).setChecked(true);

    //Pega o Componente.
    final SearchView mSearchView = (SearchView) menu.findItem(R.id.search)
            .getActionView();
    //Define um texto de ajuda:
    mSearchView.setQueryHint("Banda - Álbum");

    // exemplos de utilização:
    mSearchView.setOnQueryTextListener(new SearchView.OnQueryTextListener() {
        @Override
        public boolean onQueryTextSubmit(String query) {
            searchQueryGlobal = query;
            realizarPesquisa();

            mSearchView.setIconified(true);
            mSearchView.clearFocus();
            // call your request, do some stuff..

            // collapse the action view
            if (menu != null) {
                (menu.findItem(R.id.search)).collapseActionView();
            }
            return false;
        }

        @Override
        public boolean onQueryTextChange(String newText) {
            Log.i("well", " this worked");
            return false;
        }
    });

    return true;
}

menu_search_bar.XML

<?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"
xmlns:tools="http://schemas.android.com/tools"
tools:context="com.example.marcelofb.cratediggersguide.MainActivity">

<item
    android:id="@+id/search"
    android:icon="@android:drawable/ic_menu_search"
    android:title="@string/search_title"
    app:actionViewClass="android.support.v7.widget.SearchView"
    app:showAsAction="collapseActionView|ifRoom"/>

<!-- <item
    android:id="@+id/searchOptions"
    android:title="Tools"
    android:icon="@android:drawable/ic_menu_manage"
    app:showAsAction="always" /> -->

<item android:title="Menu No. 2">
        <group android:id="@+id/radioGroupNovoUsado" android:checkableBehavior="single">
            <item
                android:id="@+id/novo"
                android:title="NOVO"
                app:showAsAction="never" >
            </item>

            <item
                android:id="@+id/usado"
                android:title="USADO"
                app:showAsAction="never" />
        </group>
</item>

<item android:id="@+id/radioGroupCompactoLPItem"
    android:title="Menu No. 2">

        <group android:id="@+id/radioGroupCompactoLP" android:checkableBehavior="single">
            <item
                android:id="@+id/compacto"
                android:title="COMPACTO"
                app:showAsAction="never" />

            <item
                android:id="@+id/longplay"
                android:title="LP"
                app:showAsAction="never" />
        </group>

</item>


<item android:id="@+id/radioGroupNacionalImportadoItem"
    android:title="Menu No. 2">

        <group android:id="@+id/radioGroupNacionalImportado" android:checkableBehavior="single">
            <item
                android:id="@+id/nacional"
                android:title="NACIONAL"
                app:showAsAction="never" />

            <item
                android:id="@+id/importado"
                android:title="IMPORTADO"
                app:showAsAction="never" />
        </group>

</item>

ResultadosFragment - OnCrateOptionsMenu() AND onOptionsItemSelected()

@Override
public void onCreateOptionsMenu(Menu menu, MenuInflater inflater) {
    // Inflate the menu; this adds items to the action bar if it is present.
    inflater.inflate(R.menu.menu_resultados, menu);
    super.onCreateOptionsMenu(menu, inflater);
    mOptionsMenu = menu;
}

@Override
public boolean onOptionsItemSelected(MenuItem item) {
    // Handle item selection
    switch (item.getItemId()) {
        case R.id.menuRemoveLowReputation:
            exibirMensagemReputacaoMaxima();
            return true;
        /**case R.id.menuSortClosest:
            exibirMensagemEdt();
            return true;**/
        case R.id.menuSortClosestGps:
            trimmarAteCoeficienteQuinze();
            return true;
        case R.id.menuDeleteMaiorQue:
            exibirMensagemDeletarMaiorQue();
            return true;
        case R.id.menuInserirCep:
            exibirMensagemInserirCep();
            return true;
        case R.id.menuSortPrecoMenorNormalPacTabelado:
            sortCheaperNormalPacTabelado();
            mAdapter.clear();
            mAdapter.addAll(recordsGlobal);
            mAdapter.notifyDataSetChanged();
            mAdapter.notifyDataSetInvalidated();
            return true;
        case R.id.menuSortPrecoMenorExpressoSedex:
            sortCheaperExpressoSedexTabelado();
            mAdapter.clear();
            mAdapter.addAll(recordsGlobal);
            mAdapter.notifyDataSetChanged();
            mAdapter.notifyDataSetInvalidated();
            return true;
        default:
            return super.onOptionsItemSelected(item);
    }

}

menu_resultados.XML

<menu xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
app:showAsAction="ifRoom"
tools:context="com.example.marcelofb.cratediggersguide.MainActivity">

<item
    android:id="@+id/menuRemoveLowReputation"
    android:title="Remover reputação baixa" />

<!-- <item
    android:id="@+id/menuSortClosest"
    android:title="Mais Próximos - CEP" /> -->

<item
    android:id="@+id/menuSortClosestGps"
    android:title="C.V menor 15" />

<item
    android:id="@+id/menuDeleteMaiorQue"
    android:title="Deletar maior que" />

<item
    android:id="@+id/menuInserirCep"
    android:title="Inserir novo CEP para Frete" />

<item
    android:id="@+id/menuSortPrecoMenorNormalPacTabelado"
    android:title="Listar por preço menor Normal/Pac/Tabelado" />

<item
    android:id="@+id/menuSortPrecoMenorExpressoSedex"
    android:title="Listar por preço menor Expresso/Sedex" />

Upvotes: 0

Views: 359

Answers (2)

marcelofb
marcelofb

Reputation: 69

These changes solved the issue!

menu_search_bar.XML

<?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"
xmlns:tools="http://schemas.android.com/tools"
tools:context="com.example.marcelofb.cratediggersguide.MainActivity">

<item
    android:id="@+id/search"
    android:icon="@android:drawable/ic_menu_search"
    android:title="@string/search_title"
    app:actionViewClass="android.support.v7.widget.SearchView"
    app:showAsAction="collapseActionView|always" />

<item
    android:id="@+id/searchOptions"
    android:icon="@android:drawable/ic_menu_manage"
    android:title="Tools"
    app:showAsAction="always">

    <menu>
        <item android:title="Menu No. 2">
            <group
                android:id="@+id/radioGroupNovoUsado"
                android:checkableBehavior="single">
                <item
                    android:id="@+id/novo"
                    android:title="NOVO"
                    app:showAsAction="never"></item>

                <item
                    android:id="@+id/usado"
                    android:title="USADO"
                    app:showAsAction="never" />
            </group>
        </item>

        <item
            android:id="@+id/radioGroupCompactoLPItem"
            android:title="Menu No. 2">

            <group
                android:id="@+id/radioGroupCompactoLP"
                android:checkableBehavior="single">
                <item
                    android:id="@+id/compacto"
                    android:title="COMPACTO"
                    app:showAsAction="never" />

                <item
                    android:id="@+id/longplay"
                    android:title="LP"
                    app:showAsAction="never" />
            </group>

        </item>


        <item
            android:id="@+id/radioGroupNacionalImportadoItem"
            android:title="Menu No. 2">

            <group
                android:id="@+id/radioGroupNacionalImportado"
                android:checkableBehavior="single">
                <item
                    android:id="@+id/nacional"
                    android:title="NACIONAL"
                    app:showAsAction="never" />

                <item
                    android:id="@+id/importado"
                    android:title="IMPORTADO"
                    app:showAsAction="never" />
            </group>

        </item>
    </menu>

</item>

menu_resultados.XML

<menu xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
app:showAsAction="ifRoom"
tools:context="com.example.marcelofb.cratediggersguide.MainActivity">

<item
    android:id="@+id/searchOptions"
    android:icon="@drawable/ic_filter_list_white_24dp"
    android:title="Tools"
    app:showAsAction="always">

    <menu>

        <item
            android:id="@+id/menuRemoveLowReputation"
            android:title="Remover reputação baixa" />

        <!-- <item
            android:id="@+id/menuSortClosest"
            android:title="Mais Próximos - CEP" /> -->

        <item
            android:id="@+id/menuSortClosestGps"
            android:title="C.V menor 15" />

        <item
            android:id="@+id/menuDeleteMaiorQue"
            android:title="Deletar maior que" />

        <item
            android:id="@+id/menuInserirCep"
            android:title="Inserir novo CEP para Frete" />

        <item
            android:id="@+id/menuSortPrecoMenorNormalPacTabelado"
            android:title="Listar por preço menor Normal/Pac/Tabelado" />

        <item
            android:id="@+id/menuSortPrecoMenorExpressoSedex"
            android:title="Listar por preço menor Expresso/Sedex" />

    </menu>

</item>

Upvotes: 0

Emanuel
Emanuel

Reputation: 11

You can write menu.clear() in OnCreateOptionsMenu()

 @Override
    public void onCreateOptionsMenu(Menu menu, MenuInflater inflater) {
        menu.clear();
        inflater.inflate(R.menu.menu, menu);
    }

I do not know if it's the best practice. If someone knows tell us. =)

Upvotes: 1

Related Questions