【问题标题】:Try Everywhere but not getting satisfactory answer about SearchView in RecyclerViewTry Everywhere 但没有得到关于 RecyclerView 中 SearchView 的满意答案
【发布时间】:2018-05-15 23:19:54
【问题描述】:

这是我的 OnCreateOptionMenu setOnQueryListener 中显示错误 这里的contact_object是模型类

@Override
public boolean onCreateOptionsMenu(Menu menu) {

 {
    MenuInflater inflater=getMenuInflater();
    inflater.inflate(R.menu.search_list,menu);
    final MenuItem myMenuItem=menu.findItem(R.id.search_contact);
    SearchManager manager = (SearchManager) getSystemService(Context.SEARCH_SERVICE);
    SearchView searchView = (SearchView) menu.findItem (R.id.search_contact) .getActionView ();
    changedSearchViewTextColor(searchView);
   // ((EditText)searchView.findViewById(android.support.v7.appcompat.R.id.search_src_text)).setHintTextColor(getResources().getColor(R.color.white));
     searchView.setOnQueryTextListener(new SearchView.OnQueryTextListener() {
        @Override
        public boolean onQueryTextSubmit(String query) {

              if (!searchView.isIconified()){
                searchView.setIconified(true);
            }
            myMenuItem.collapseActionView();
            return false;
        }
        }
        @Override
        public boolean onQueryTextChange(String newText) {
             newText=newText.toLowerCase();
            final List<Contact_Object> filtermodelist=filter(contacts,newText);
            adapter.setFilter(filtermodelist);
            return true;
        }
    });
    return true;
  }

我已经实现了如下过滤选项

    public List<Contact_Object> filter(List<Contact_Object> p,String query ) 
    {
    query=query.toLowerCase();
    final List<Contact_Object> filterModeList=new ArrayList<>();
    for (Contact_Object model :p){
        final String text=model.getName().toLowerCase();
        if (text.startsWith(query)){
            filterModeList.add(model);

        }
    }
    return filterModeList;
}

我已在 CustomAdapter 类中声明 setFilter 函数如下

     public  void  setFilter(List<Contact_Object> listItem){
    parentList=new ArrayList<>();
    parentList.addAll(listItem);
    notifyDataSetChanged();
}

我努力了,但没有得到合适的答案 请大家帮帮我,等待答复

【问题讨论】:

  • 什么error?提供来自 logicat 的异常。
  • java.lang.NullPointerException:尝试在空对象上调用虚拟方法 'void android.support.v7.widget.SearchView.setOnQueryTextListener(android.support.v7.widget.SearchView$OnQueryTextListener)'参考
  • 你的SearchViewnull 看看你是怎么把SearchViewId 联系起来的,好像你搞砸了。

标签: android android-studio android-recyclerview android-searchmanager


【解决方案1】:

onQueryTextChange 中没有逻辑,因为newText 没有在任何地方传递。您正在将empty 列表传递给setFilter 方法。

 @Override
public boolean onQueryTextChange(String newText) {
    newText = newText.toLowerCase();
    final List<Contact_Object> filterModeList=new ArrayList<>();
    for (Contact_Object obj : p) {
        String name = obj.getName().toLowerCase();
        if(name.contains(newText))
            filterModeList.add(obj);
    }
    adapter.setFilter(filtermodelist);
    return true;
}

【讨论】:

  • 最终名单 filtermodelist=filter(contacts,newText);
猜你喜欢
  • 1970-01-01
  • 2018-09-01
  • 2023-01-28
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-06-23
  • 1970-01-01
相关资源
最近更新 更多