我阅读了有关搜索建议的文档,我几乎实现了所有内容。
它要求我创建content provider
,然后从cursor
方法返回query
。
这就是我所做的:
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
字符串并且我收到了日志,但我没有看到任何建议?
我是否必须制作自己的适配器或默认适配器就足够了?
没有提及建议的观点,除了它说我必须返回一个光标,其中两列是强制性的。
我错过了什么吗?P.s:
getTitle()
& getArtist()
返回string
。getId()
返回long
更新
更改了代码并删除了looop。
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;
这不起作用
答案 0 :(得分:1)
嗯,似乎没有人感兴趣。
我发现为什么它没有工作。
列的顺序必须正确,即第一列和第二列必须为_id
和SearchManager.SUGGEST_COLUMN_TEXT_1
MatrixCursor mc=new MatrixCursor(new String[]{"_id",SearchManager.SUGGEST_COLUMN_TEXT_1,SearchManager.SUGGEST_COLUMN_TEXT_2});
这在搜索对话框中给出了指定的结果。