我在我的应用程序中实现了一个搜索机制,这样当我搜索姓名或电子邮件时,它会显示具有匹配字符的字符串。但是,我的列表中有一些带重音的字符串,当我使用与该特定重音相关的常规字符进行搜索时,假设我有字符串“àngela”并且我搜索“angela”,它不会显示该字符串,除非我使用确切的字符串“进行搜索”安吉拉”。
我试图让它工作,无论重音与否,假设我输入“à”,它应该显示包含“à”和“a”的所有字符串,反之亦然。知道该怎么做吗?我在网上查找了一堆文章,例如:How toignoreaccent in SQLite query (Android) ",也尝试了规范化器,但它部分有效,如果我搜索“a”,它确实也会显示带有常规字母的重音字母,但是如果我用带重音的字母搜索,它不会显示任何内容。
这是我的过滤器代码:
@Override
public Filter getFilter() {
return new Filter() {
@Override
protected FilterResults performFiltering(CharSequence charSequence) {
String charString = charSequence.toString();
if (charString.isEmpty()) {
mSearchGuestListResponseListFiltered = mSearchGuestListResponseList;
} else {
List<RegisterGuestList.Guest> filteredList = new ArrayList<>();
for (RegisterGuestList.Guest row : mSearchGuestListResponseList) {
// name match condition. this might differ depending on your requirement
// here we are looking for name or phone number match
String firstName = row.getGuestFirstName().toLowerCase();
String lastName = row.getGuestLastName().toLowerCase();
String name = firstName + " " +lastName;
String email = row.getGuestEmail().toLowerCase();
if ( name.trim().contains(charString.toLowerCase().trim()) ||
email.trim().contains(charString.toLowerCase().trim())){
filteredList.add(row);
searchText = charString.toLowerCase();
}
}
};
}
如果有人感兴趣,这里是整个适配器类:https://pastebin.com/VxsWWMiS 这是相应的活动视图:
如有必要,很乐意分享任何细节。另外,我在搜索时随机得到了indexoutofboundexception onBind()方法(使用recyclerview作为列表):
java.lang.IndexOutOfBoundsException: Index: 7, Size: 0
at java.util.ArrayList.get(ArrayList.java:437)
知道该怎么做吗?
慕少森
相关分类