2017-04-22 14 views
0

私は3つの断片をコントロールするメインアクティビティを持っています。 MainActivityにはオプションバーの検索バーといくつかのフィルタがあります。問題は、フラグメント(ResultadosFragment)の1つに独自のOnCreateOptionsMenu()の実装があり、独自のメニューを展開することです。 MainActivityとFragment-menusの両方のオプションが1つのオプションメニューで混在することが起こります。ここで 断片化メニューオプションからMainActivityメニューオプションを分離する方法?

はスクリーンショットです:

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" /> 

答えて

0

menu.clear()OnCreateOptionsMenu()

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

私はそれがベストプラクティスかどうかわかりません。もし誰かが私たちに教えてくれれば。 =)

+0

こんにちは。私はちょうどそれを試みたが、メニューの1つは隠される。私は2つの異なるメニューを表示したい。 1つはカスタマイズされたアイコン(メインアクティビティオプションメニュー)と3つのドットボタン(ResultadosFragmentオプションメニュー)を持つものです。 – marcelofb

+0

申し訳ありません。私は2つのメニューを持つことが可能かどうかはわかりません。 – Emanuel

0

これらの変更により、この問題は解決しました。

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> 

関連する問題