2016-03-04 5 views
2

Я делаю поиск в панели действий приложения. У меня есть значок поиска, и он складывается, когда я нажимаю его, и я могу вводить запросы.Android SearchView setOnQueryTextListener не работает?

Когда мое приложение запускается, вызывается onCreateOptionsMenu. Я печатаю тестовый оператор, чтобы проверить его, а затем внутри этой функции я установил setOnQueryTextListener. Но это не сработает. Я пробовал тестировать его, печатая, когда когда-либо печатаю что-то в searchview, но он не работает. Пожалуйста, помогите мне найти ошибку. Также есть Listener, когда он расширяется и сжимается, и это тоже не работает.

@Override 
public void onCreateOptionsMenu(Menu menu, MenuInflater inflater) { 

    inflater.inflate(R.menu.manageusersmenu, menu); 
    MenuItem item = menu.findItem(R.id.action_search); 
    SearchView searchView = (SearchView) MenuItemCompat.getActionView(item); 

    Log.i("onCreateOptionsMenu: ", "I made it in here"); 

    MenuItemCompat.setOnActionExpandListener(item, 
      new MenuItemCompat.OnActionExpandListener() { 
       @Override 
       public boolean onMenuItemActionCollapse(MenuItem item) { 
        mAdapter.setFilter(mUsers); 
        Log.i("ActionCollapse: ", "Collapsed"); 
        return true; 
       } 
       @Override 
       public boolean onMenuItemActionExpand(MenuItem item) { 
        Log.i("ActionExpand: ", "Expanded"); 
        return true; 
       } 
      }); 

    searchView.setOnQueryTextListener(new SearchView.OnQueryTextListener() { 
     @Override 
     public boolean onQueryTextSubmit(String query) { 
      return false; 
     } 

     @Override 
     public boolean onQueryTextChange(String newText) { 
      Log.i("on query: ", newText); 
      List<User> filteredModelList = filter(mUsers, newText); 
      for (int i = 0; i < filteredModelList.size(); i++) { 
       Log.i("user, ", filteredModelList.get(i).getFName().toString()); 
      } 
      mAdapter.setFilter(filteredModelList); 
      return true; 
     } 

     private List<User> filter(List<User> users, String query) { 
      query = query.toLowerCase(); 

      final List<User> filteredModelList = new ArrayList<>(); 
      for (User u : users) { 
       final String text = u.getFName().toLowerCase(); 
       if (text.contains(query)) { 
        filteredModelList.add(u); 
       } 
      } 
      return filteredModelList; 
     } 
    }); 

} 

файл меню

<menu 
    xmlns:android="http://schemas.android.com/apk/res/android" 
    xmlns:app="http://schemas.android.com/apk/res-auto" 
    > 

    <!-- "Mark Favorite", should appear as action button if possible --> 
    <item 
     android:id="@+id/add_new_user" 
     android:icon="@drawable/ic_action_name" 
     android:title="@string/add_new_user" 
     app:showAsAction="ifRoom"/> 

    <item 
     android:id="@+id/action_search" 
     android:icon="@android:drawable/ic_menu_search" 
     android:title="action_search" 
     app:actionViewClass="android.support.v7.widget.SearchView" 
     app:showAsAction="always|collapseActionView" /> 

</menu> 
+0

разместим ваш manageusersmenu.xml также – UMESH0492

+0

просто поставил файл меню – Pete

ответ

3

Я использовал это, и это не сработало знаю, почему:

Android abs with SearchView, onQueryTextListener not working

@Override 
    public void onPrepareOptionsMenu(Menu menu) { 
     super.onPrepareOptionsMenu(menu); 
     MenuItem item = menu.findItem(R.id.action_search); 
     SearchView searchView = (SearchView) MenuItemCompat.getActionView(item); 

     searchView.setOnQueryTextListener(new SearchView.OnQueryTextListener() { 
      @Override 
      public boolean onQueryTextSubmit(String query) { 
       return false; 
      } 

      @Override 
      public boolean onQueryTextChange(String newText) { 
       Log.i("well", " this worked"); 
       return false; 
      } 
     }); 
    } 
Смежные вопросы