2017-07-27 3 views
0

質問のタイトルにあるように、私はウィジェットをツールバーのDialogFragmentに実装しようとしています。メニューは、ツールバーの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; 
    }  

クエリが送信されたときにトーストは表示されません!ダイアログフラグメント内の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(中searchviewを導入)し、そこにリスナーを設定することができます。これはホストアクティビティクラスで行われますが、フラグメント内でオーバーライドできます。

+0

'getActivity()。getApplicationContext'が機能していません。実際には、 'onQueryTextSubmitted'メソッドは呼び出されません – Leonald

+0

私は動作するコードに基づいて私の答えを更新しています。プロジェクトに応じて値を変更する必要があります – Cem

関連する問題