当用户搜索联系人时,我试图在搜索对话框中显示自定义建议。自定义建议要求内容提供程序返回一个列,其中一个列名为SearchManager.SUGGEST_COLUMN_TEXT_1
.
我正在查询声明投影的联系人提供程序,如下所示:
String[] projection = new String[]{Contacts._ID,Contacts.DISPLAY_NAME + " AS " + SearchManager.SUGGEST_COLUMN_TEXT_1};
但这是抛出异常:
java.lang.IllegalArgumentException: Invalid column display_name AS suggest_text_1
我一直在研究,这是由于联系人提供程序strictProjectionMap
在他们的 中设置了标志SQLiteQueryBuilder
,所以我想知道是否有人有解决方法来指定别名。我找到了几个解决方案,但这些解决方案需要修改内容提供程序,在这种情况下这是不可能的,因为它是一个 Android 提供程序。
如果不可能,这种情况的最佳做法是什么?我当前的解决方案是使用正确的列名创建一个MatrixCursor
,并将查询返回的游标中的所有值复制到联系人提供程序,但在效率方面感觉非常错误,所以我认为可能有更好的方法。
感谢您的建议。胡安