Android:搜索过滤器仅用于完全匹配

时间:2015-03-27 05:11:51

标签: android listview search filter

我正在尝试为列表视图表设置一个搜索过滤器,该过滤器只会返回完全匹配的结果。我已经设置了一个链接到我的表格布局的过滤器,如下所示:

 private class RowFilter extends Filter{

		@Override
		protected FilterResults performFiltering(CharSequence constraint) {
			FilterResults results = new FilterResults();
			
			if(constraint == null || constraint.length() == 0){
				
				results.values = data;
				results.count = data.size();
			}
			
			else{
				
				ArrayList<Rows> filterData = new ArrayList<Rows>();
				
				for (Rows r : data) {
					if(r.getTenancy().toUpperCase().startsWith(constraint.toString().toUpperCase())){
						
						filterData.add(r);
						results.values = filterData;
						results.count = filterData.size();
						
						}else if(r.getAddress().toUpperCase().startsWith(constraint.toString().toUpperCase())){
							
							filterData.add(r);
						
						}else if(r.getLocation().toUpperCase().startsWith(constraint.toString().toUpperCase())){
							
							filterData.add(r);
						
						}else if(r.getName().toUpperCase().startsWith(constraint.toString().toUpperCase())){
							
							filterData.add(r);
						
						}	
				}
				
				results.values=filterData;
				results.count = filterData.size();
				
		
			}
			return results;
		}

		@Override
		protected void publishResults(CharSequence constraint,
				FilterResults results) {
			if(results.count==0){
				notifyDataSetInvalidated();
			}else{if(results.count==1){}
				
				data = (ArrayList<Rows>) results.values;
				notifyDataSetChanged();
				
			}
		}
    }
}

如果字符串与条目匹配,则将它们添加到已发布行的最终列表中。

我认为问题是它一直在更新,所以当我搜索不存在的内容时,它只显示以前搜索过的所有内容,而不是显示空表我想要的。我知道我在代码中遗漏了一些重要内容,以便实现这一点,所以任何帮助都会非常受欢迎,因为我已经花了很长时间在这上面。

这是main.java中的代码,

EditText editTxt = (EditText) findViewById(R.id.search_query);
		
		editTxt.addTextChangedListener(new TextWatcher() {
	          
			@Override
		    public void onTextChanged(CharSequence s, int start, int before, int count) {
		        System.out.println("Text ["+s+"]-Start ["+start+"]-Before["+before+"]-Count["+count+"]");
		        
		        if(count<before){
		        
		        	 adapter.resetData();
		        	
		        }
		        
		        adapter.getFilter().filter(s.toString());                           
		    }
		     
		    @Override
		    public void beforeTextChanged(CharSequence s, int start, int count,
		            int after) {
		         
		    }
		     
		    @Override
		    public void afterTextChanged(Editable s) {
		    }
		});

编辑:基本上我只希望能够看到完全匹配我的搜索文本的结果,否则根本不打印任何表格。

0 个答案:

没有答案