2017-07-27 60 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

相关问题