因为需要到搜索方法,我上网查看了一下别人的搜索方法,使用过滤器之类的,发现别人的功能虽然强大,但是同样的复杂。我只需要简单的名称搜索,所以自己尝试写了一下。
简单来说我的搜索思路就是:
1.获取搜索的字段,如果搜索名字带李的,就输入一个李字。
2.将搜索的字段作为split的切割符,让每个item逐个去切割,若切割成功,生成的String数组size大于2,说明包含改字段,然后添加到新的item数组里面。
3.这里面存在一个问题就是当这个切割符是第一位或者最后一位时,即便包含切割符缺个成功生成的数组还是一个,所以,需要在切割后数组大小为一的item进行再一次匹配,用String的indexof和lastindexof的方法对头尾再进行一次判断,若包含则添加进数组展示。
其实这里搜索完全可以不需要第二步,直接进行第三步从头到尾判断一遍就行,这里的第二步有其他作用,进行第二步的话,通过切割生成的数组大小又可以进行相关性大小的简单判断,通过切割数组大小来排序,相关性大的在前。
下面时简单的示范,代码不完整:
public void dialogSearch(){
String ss = ed_dialog_search.getText().toString();
if (!ss .equals("")){
alist.clear();
for (int i =0;i<dataList.size();i++){
Log.d(TAG, "dialogSearch: "+1);
if (dataList.get(i).get("name").toString().indexOf(ss,dataList.get(i).get("name").toString().length()-1) != -1){
alist.add(dataList.get(i));
}
String[] aa = dataList.get(i).get("name").toString().split(ss);
if (aa.length>1){
alist.add(dataList.get(i));
}
showListView2(alist);
}
}else showListView2(dataList);
}