我阅读了有关搜索建议的文档,并且几乎实现了所有内容。
它要求我制作一个content provider
,然后从它的query
方法返回一个cursor
。
这是我做的:
public Cursor query(@NonNull Uri uri, @Nullable String[] projection, @Nullable String selection, @Nullable String[] selectionArgs, @Nullable String sortOrder) {
String[] mColumnNames={SearchManager.SUGGEST_COLUMN_TEXT_1,SearchManager.SUGGEST_COLUMN_TEXT_2, BaseColumns._ID};
String query = uri.getLastPathSegment().toLowerCase(); //Logging gives me the string
MatrixCursor matrixCursor=new MatrixCursor(mColumnNames);
int i=0;
for(Song song:songs){
if(song.getTitle().toLowerCase().contains(query)){
matrixCursor.addRow(new Object[]{song.getTitle(),song.getArtist(),song.getId()});
}
}
return matrixCursor;
}
我记录了 query
字符串并且我正在获取日志但我没有看到任何建议?
我必须制作自己的适配器还是默认的适配器就足够了?
没有提到建议的观点,只是说我必须返回一个游标,其中两列是强制性的。
我错过了什么吗?
附言:
getTitle()
&getArtist()
返回string
。getId()
返回long
更新:
更改了代码并删除了循环。
String[] mColumnNames={SearchManager.SUGGEST_COLUMN_TEXT_1,SearchManager.SUGGEST_COLUMN_TEXT_2, BaseColumns._ID};
String query = uri.getLastPathSegment().toLowerCase();
MatrixCursor matrixCursor=new MatrixCursor(mColumnNames);
matrixCursor.addRow(new Object[]{"asasas","aaa",(long)1});
return matrixCursor;
这也行不通
最佳答案
嗯,似乎没有人感兴趣。
我找到了它不起作用的原因。
列的顺序必须正确,即第一列和第二列必须是 _id
和 SearchManager.SUGGEST_COLUMN_TEXT_1
MatrixCursor mc=new MatrixCursor(new String[]{"_id",SearchManager.SUGGEST_COLUMN_TEXT_1,SearchManager.SUGGEST_COLUMN_TEXT_2});
这在搜索对话框中给了我指定的结果。
关于android自定义建议不会出现,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47917200/