2016-03-04 61 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; 
      } 
     }); 
    }