-2

Lösung:ViewPager mit Fragments - Suche reagiert nicht

Das Problem aufgrund der Verwendung von app:showAsAction="collapseActionView|always" war. Ersetzen Sie dies durch app:showAsAction="always" löste das Problem.


Ich habe ein Fragment mit ViewPager und die ViewPager hat 3 Fragmente. Jedes Fragment hat eine Suchansicht in seinen Menüelementen (angezeigt in der Symbolleiste als Menüelement). Wenn ich auf das SearchView klicke, bekomme ich das click-Ereignis in onOptionsItemSelected, aber das SearchView wird nicht erweitert. Nicht sicher, was zu tun ist.

Ich habe setHasOptionMenu(true) in onCreate() für alle Fragmente gesetzt.

Hier ist mein aktueller Code: für jedes Fragment

onCreateOptionsMenu:

@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); 
    } 

Menu XML-Datei:

<?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> 

Anderer zugehöriger Code: wenn es

@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

Überschreiben Sie die onResume() in der PageFrame-Klasse und die Suchansicht von dort. – XxGoliathusxX

Antwort

0

Ich bin mit AppCompat v7 23.1.1. Ich habe ein Fragment mit ViewPager (FragmentStatePagerAdapter), das 3 Fragmente lädt. Ich habe ein SearchView mit in jedem dieser 3 Fragmente. Wenn ich auf SearchView klicke, wurde die Ansicht nicht erweitert. Das Problem wurde durch die Verwendung von app:showAsAction="collapseActionView|always" verursacht. Ersetzen Sie dies durch app:showAsAction="always" löste das Problem.

Nicht sicher, ob das ein Fehler ist, aber this post und this post half mir bei der Lösung dieses Problems.

0
hilft

Ich t hink Sie haben die Aktion erweitern sehen selbst:

In onOptionsItemSelected:

 if (item.getItemId() == R.id.action_search) { 
      item.expandActionVew(); 
     } 
Verwandte Themen