Android自定义建议不会显示出来

时间:2017-12-21 02:45:54

标签: android

我阅读了有关搜索建议的文档,我几乎实现了所有内容。

它要求我创建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;

这不起作用

1 个答案:

答案 0 :(得分:1)

嗯,似乎没有人感兴趣。

我发现为什么它没有工作。

列的顺序必须正确,即第一列和第二列必须为_idSearchManager.SUGGEST_COLUMN_TEXT_1

MatrixCursor mc=new MatrixCursor(new String[]{"_id",SearchManager.SUGGEST_COLUMN_TEXT_1,SearchManager.SUGGEST_COLUMN_TEXT_2});

这在搜索对话框中给出了指定的结果。