-2

ソリューション:フラグメントを含むViewPager - SearchViewが応答しない

この問題は、app:showAsAction="collapseActionView|always"の使用によるものです。これをapp:showAsAction="always"に置き換えると問題が解決しました。


私はViewPagerでフラグメントがあり、ViewPagerには3つのフラグメントがあります。各フラグメントは、そのメニュー項目にSearchViewを持っています(メニュー項目としてツールバーに表示されます)。 SearchViewをクリックすると、onOptionsItemSelectedでクリックイベントが発生しますが、SearchViewは展開されません。何をすべきかわからない。

すべてのフラグメントについてsetHasOptionMenu(true)onCreate()に設定しました。ここで

は私の現在のコードです:

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

     SearchManager searchManager = (SearchManager) activity. 
       getSystemService(Context.SEARCH_SERVICE); 
     searchMenuItem = menu.findItem(R.id.ic_action_search); 
     searchView = (SearchView) searchMenuItem.getActionView(); 

     searchView.setSearchableInfo(searchManager. 
       getSearchableInfo(activity.getComponentName())); 
     searchView.setOnQueryTextListener(this); 
    } 

メニュー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"> 

    <item 
     android:id="@+id/ic_action_search" 
     android:icon="@drawable/ic_search_white_24dp" 
     android:orderInCategory="0" 
     android:title="Search" 
     app:actionViewClass="android.support.v7.widget.SearchView" 
     app:showAsAction="collapseActionView|always" /> 

    <item 
     android:id="@+id/action_list" 
     android:icon="@drawable/ic_action_list_white" 
     android:orderInCategory="1" 
     android:title="@string/action_list" 
     android:checked="true" 
     android:checkable="true" 
     app:showAsAction="never" /> 

    <item 
     android:id="@+id/action_grid" 
     android:icon="@drawable/ic_action_grid_white" 
     android:orderInCategory="2" 
     android:title="@string/action_grid" 
     android:checked="false" 
     android:checkable="true" 
     app:showAsAction="never" /> 

    <item 
     android:id="@+id/action_mini" 
     android:icon="@drawable/ic_action_grid_white" 
     android:orderInCategory="3" 
     android:title="@string/action_mini" 
     android:checked="false" 
     android:checkable="true" 
     app:showAsAction="never" /> 

</menu> 

その他の関連コード:それは場合に役立ちます

@Override 
    public boolean onQueryTextSubmit(String query) { 
     return false; 
    } 

    @Override 
    public boolean onQueryTextChange(String newText) { 
     mViewPagerPetitionsRecyclerViewAdapter.getFilter().filter(newText); 
     return true; 
    } 


@Override 
    public boolean onOptionsItemSelected(MenuItem item) { 

     if (item.getItemId() == R.id.action_list) { 
      prefs.edit().putString(Const.VIEWPAGER.VIEW_TYPE, Const.VIEWPAGER.LIST_VIEW).apply(); 
      mStaggeredLayoutManager.setSpanCount(1); 
     } else if (item.getItemId() == R.id.action_grid) { 
      prefs.edit().putString(Const.VIEWPAGER.VIEW_TYPE, Const.VIEWPAGER.GRID_VIEW).apply(); 
      mStaggeredLayoutManager.setSpanCount(2); 
     } else if (item.getItemId() == R.id.action_mini) { 
      prefs.edit().putString(Const.VIEWPAGER.VIEW_TYPE, Const.VIEWPAGER.MINI_VIEW).apply(); 
      mStaggeredLayoutManager.setSpanCount(1); 
     } 

     ActivityCompat.invalidateOptionsMenu(activity); 
     mViewPagerPetitionsRecyclerViewAdapter.notifyDataSetChanged(); 
     mIMainNewPetitionsListener.onLayoutChangedListener(); 

     return super.onOptionsItemSelected(item); 
    } 


    @Override 
    public void onPrepareOptionsMenu(Menu menu) { 

     MenuItem list_item = menu.findItem(R.id.action_list); 
     MenuItem grid_item = menu.findItem(R.id.action_grid); 
     MenuItem mini_item = menu.findItem(R.id.action_mini); 

     String item_type = prefs.getString(Const.VIEWPAGER.VIEW_TYPE, Const.VIEWPAGER.LIST_VIEW); 

     if (item_type.equalsIgnoreCase(Const.VIEWPAGER.LIST_VIEW)) { 
      list_item.setChecked(true); 
      grid_item.setChecked(false); 
      mini_item.setChecked(false); 
     } else if (item_type.equalsIgnoreCase(Const.VIEWPAGER.GRID_VIEW)) { 
      list_item.setChecked(false); 
      grid_item.setChecked(true); 
      mini_item.setChecked(false); 
     } else if (item_type.equalsIgnoreCase(Const.VIEWPAGER.MINI_VIEW)) { 
      list_item.setChecked(false); 
      grid_item.setChecked(false); 
      mini_item.setChecked(true); 
     } 

     super.onPrepareOptionsMenu(menu); 

    } 
+0

PageFrament-ClassのonResume()とそこからのsearchviewを上書きします。 – XxGoliathusxX

答えて

0

私はAPPCOMPAT V7 23.1.1を使用しています。 ViewPager(FragmentStatePagerAdapter)に3つのフラグメントをロードするフラグメントがあります。私はこれら3つの断片のそれぞれにSearchViewを持っています。 SearchViewをクリックすると、ビューは展開されませんでした。

この問題は、app:showAsAction="collapseActionView|always"の使用によるものです。これをapp:showAsAction="always"に置き換えると問題が解決しました。

これがバグかどうかはわかりませんが、this postthis postはこれを解決するのに役立ちました。

0
各断片

onCreateOptionsMenu用

あなたが行動を展開する必要がヒンク自分自身を表示:onOptionsItemSelected

 if (item.getItemId() == R.id.action_search) { 
      item.expandActionVew(); 
     } 
関連する問題