SearchView上自定义搜索建议的问题

时间:2015-10-06 13:57:40

标签: android android-contentprovider searchview search-suggestion

我使用SearchView(ActionBar)和自定义适配器和提供程序实现了自定义搜索。 我遇到的问题是ContentProvider的query()方法只调用一次,第一次在SearchView中输入内容!如果我继续在视图中键入,则不会调用查询,因此建议列表不会更新。

在一个片段中我有SearchView init:

@Override
    public void onCreateOptionsMenu(Menu menu, MenuInflater inflater) {
        super.onCreateOptionsMenu(menu, inflater);
        inflater.inflate(R.menu.planning, menu);
        SearchManager searchManager = (SearchManager) getActivity().getSystemService(Context.SEARCH_SERVICE);
        searchView = (SearchView) menu.findItem(R.id.searchAirportItem).getActionView();
        searchView.setSearchableInfo(searchManager.getSearchableInfo(getActivity().getComponentName()));
        searchView.setOnQueryTextListener(this);
        searchView.setOnSuggestionListener(this);
        airportSearchAdapter = new AirportSearchAdapter(getActivity());
        searchView.setSuggestionsAdapter(airportSearchAdapter);
    }

建议适配器AirportSearchAdapter仅重新定义建议项目的布局。

Fragment实现QueryTextListener,onQueryTextChange方法看起来像

@Override
public boolean onQueryTextChange(String newText) {
    Bundle data = new Bundle();
    data.putString("query", newText);
    getActivity().getLoaderManager().initLoader(1, data, this);
    return true;
}

Fragment还实现了LoaderCallbacks:

    @Override
    public Loader<Cursor> onCreateLoader(int id, Bundle args) {
        Uri uri = AirportsContentProvider.CONTENT_URI;
        return new CursorLoader(getActivity(), uri, null, null, new String[] { args.getString("query") }, null);
    }

    @Override
    public void onLoadFinished(Loader<Cursor> loader, Cursor data) {
        airportSearchAdapter.changeCursor(data);
    }`

任何想法为什么ContentProvider查询方法只被调用一次?不是每次我输入?

1 个答案:

答案 0 :(得分:0)

正如Selvin所说,问题是initLoader()方法。

正确的行是:

getActivity().getLoaderManager().restartLoader(1, data, this);