2017-07-27 74 views
0

正如問題的標題所述,我試圖實施放置在DialogFragment的工具欄中的SearchView小部件。該菜單使用工具欄的inflateMenu方法充氣。Android DialogFragment - 從工具欄充氣菜單中實現SearchView小部件

注意:對話框片段本身被稱爲另一個片段中,沒有一個活動

這裏是我所說的dialogFragment:

SearchFragment searchDialog = new SearchFragment(); 
searchDialog.setStyle(DialogFragment.STYLE_NORMAL, R.style.FullscreenDialogFragment); 
searchDialog.show(getChildFragmentManager(), "search"); 

這裏是我的menu.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" 
    tools:context="com.hubsante.Fragment.SearchFragment"> 

    <item 
     android:id="@+id/action_search" 
     android:title="Rechercher" 
     app:actionViewClass="android.support.v7.widget.SearchView" 
     app:showAsAction="ifRoom" /> 

</menu>  

並執行菜單

toolbar.inflateMenu(R.menu.menu_objective_details); 
toolbar.setOnMenuItemClickListener(this);  

@Override 
    public boolean onMenuItemClick(MenuItem item) { 

     if (item.getItemId() == R.id.action_search){ 
      SearchManager manager = (SearchManager) getActivity().getSystemService(Context.SEARCH_SERVICE); 

      SearchView search = (SearchView) item.getActionView(); 
      search.setSearchableInfo(manager.getSearchableInfo(getActivity().getComponentName())); 
      search.setOnQueryTextListener(new SearchView.OnQueryTextListener() { 

       @Override 
       public boolean onQueryTextSubmit(String query) { 
        Toast.makeText(getContext(), query, Toast.LENGTH_SHORT).show(); 
        return true; 
       } 

       @Override 
       public boolean onQueryTextChange(String query) { 
        return true; 

       } 

      }); 
     } 
     return true; 
    }  

提交查詢時不會顯示吐司!即使當我嘗試更新dialogfragment中的TextView時,它也不會更新。

回答

0
@Override 
    public boolean onCreateOptionsMenu(Menu menu) { 
     getMenuInflater().inflate(R.menu.mymenu, menu); 
     final SearchView searchView= (SearchView) menu.findItem(R.id.action_search).getActionView();    searchView.setQueryHint(getResources().getString(R.string.search_view_helper)); 
     searchView.setOnQueryTextListener(new SearchView.OnQueryTextListener() { 
      @Override 
      public boolean onQueryTextSubmit(String query) { 
        searchView.clearFocus(); 
       // Your toast message 
       return true; 
      } 

      @Override 
      public boolean onQueryTextChange(String input) { 
       return false; 
      } 

     }); 
     return true; 
    } 

,而不是試圖用一個方法onMenuItemClick,你可以介紹onCreateOptionsMenu的搜索查看(),並設置聽衆在那裏。這是在主機活動類中完成的,但是您可以在片段中覆蓋它

+0

'getActivity()。getApplicationContext'不起作用。實際上'onQueryTextSubmitted'方法永遠不會被稱爲 – Leonald

+0

我正在更新我的答案根據我寫的代碼工作。您應該根據您的項目更改值 – Cem