我有一个基于CursorAdapter的Listview。我已经为它实现了过滤功能,一切正常,除了一件事: 当我用拉丁字母输入SearchView时,它会按预期过滤 - 不会在大写/小写字母之间产生差异。所以,当我有约翰史密斯"在我的列表中,我可以使用" john"来过滤它,但对于没有拉丁字母,这不起作用。如果我的名字以大写字母开头,我在SearchView中输入小写字母,它就找不到名字。
以下是可能有趣的代码部分:
String loaclSelection = SELECTION + " AND " + CONTACT_NAME + " LIKE ?";
String localArgs = new String[]{"%"+constraintString+"%"};
return new CursorLoader(getActivity(),
URI,
PROJETION,
loaclSelection,
localArgs,
SORT_ORDER);
constraintString是来自searchView的字符串。
有人知道如何解决这个问题吗?
答案 0 :(得分:1)
Android sqlite中有COLLATE UNICODE
但它并不适用于LIKE
。
请考虑以下事项:
添加另一个列,以小写形式存储名称,使用String.toLowerCase()
以Java格式转换。
在Java中使用类似的小写字词作为搜索字词。
使用原始的混合大小写字段进行显示。