2017-06-14 35 views
0

我不知道会发生什么,但我的searchView不能很好地工作,当我在搜索栏中输入2个字的值。Searchview过滤器没有工作后,我打空格键

例如:

我的ListView显示这样的

你救我

高于一切

我不以为耻

在搜索栏我想用关键字搜索歌曲“你救我” “你”的rd。结果很好,并显示完全匹配,但是当我尝试输入“您保存”关键字时,结果在列表视图中不会显示任何内容。当输入的值在两个单词之间有空格时,似乎searchview不起作用。

我该如何解决这个问题?

searchView.setOnQueryTextListener(new SearchView.OnQueryTextListener() { 

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

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

回答

1

试试这个

searchView.setOnEditorActionListener(new EditText.OnEditorActionListener() { 
     @Override 
     public boolean onEditorAction(TextView v, int actionId, 
             KeyEvent event) { 
      return true; 
     } 
    }); 
    addTextChangeListener(); 

现在创建这个方法

private void addTextChangeListener() { 
    searchView.addTextChangedListener(new TextWatcher() { 
     @Override 
     public void beforeTextChanged(CharSequence s, int start, int count, int after) { 

     } 

     @Override 
     public void onTextChanged(CharSequence query, int start, int before, int count) { 

      query = query.toString().trim().toLowerCase(); 

      final ArrayList<CityDataModel> filteredList = new ArrayList<>(); 



      final CharSequence finalQuery = query; 
      new Thread(new Runnable() { 
       @Override 
       public void run() { 

        // Clear the filter list 
        filteredList.clear(); 

        // If there is no search value, then add all original list items to filter list 
        if (TextUtils.isEmpty(finalQuery)) { 

         filteredList.addAll(cities); 

        } else { 
         // Iterate in the original List and add it to filter list... 
         for (CityDataModel item : cities) { 
          if (item.getCity_name().toLowerCase().contains(finalQuery.toString().toLowerCase()) 
            ) { 
           // Adding Matched items 
           filteredList.add(item); 
          } 
         } 
        } 

        // Set on UI Thread 
        ((Activity) context).runOnUiThread(new Runnable() { 
         @Override 
         public void run() { 
          // Notify the List that the DataSet has changed... 
          adapter = new SearchCityAdapter(SearchCityClass.this, filteredList); 
          recyclerSearchCity.setAdapter(adapter); 


          if (filteredList.size() == 0) { 
           tvNoCityFound.setVisibility(View.VISIBLE); 
          } else { 
           tvNoCityFound.setVisibility(View.GONE); 
          } 
         } 
        }); 

       } 
      }).start(); 


     } 

     @Override 
     public void afterTextChanged(Editable s) { 

     } 
    }); 
} 
+0

它说,不能解析方法setOnEditorActionListener(匿名android.widget.TextView.OnEditorActionListener):-( –

+0

它是一个edittext我的朋友的方法 –