2017-06-14 34 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我的朋友的方法 –