键入时执行搜索

Rya*_*yan 5 search android searchview

我有一个可以ActivityActionBar's android.support.v7.widget.SearchView(在软键盘上输入“Go”)中提交输入时查询远程数据库的工作搜索。这工作正常,但我最终想在每次SearchView通过添加或删除字符更改 的文本时查询数据库。我的初始化代码SearchView如下。

SearchFragment.javaActivity上面提到的可搜索的子片段)

@Override
public void onCreateOptionsMenu(Menu menu, MenuInflater inflater) {
    super.onCreateOptionsMenu(menu, inflater);
    inflater.inflate(R.menu.menu_search, menu);

    // Get the searchable.xml data about the search configuration
    final SearchManager searchManager = (SearchManager) getActivity().getSystemService(Context.SEARCH_SERVICE);
    SearchableInfo searchInfo = searchManager.getSearchableInfo(getActivity().getComponentName());
    // Associate searchable configuration with the SearchView
    mSearchView = (SearchView) menu.findItem(R.id.menu_item_search).getActionView();
    mSearchView.setSearchableInfo(searchInfo);
    mSearchView.requestFocus();
    mSearchView.onActionViewExpanded();
    getActivity().getWindow().setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_STATE_ALWAYS_VISIBLE);
    mSearchView.setOnQueryTextListener(new SearchView.OnQueryTextListener() {
        @Override
        public boolean onQueryTextSubmit(String query) {
            mSearchListAdapter.clear();
            return false;
        }

        @Override
        public boolean onQueryTextChange(String query) {
            mSearchListAdapter.clear();
            // Execute search ...
            return false;
        }
    });
}
Run Code Online (Sandbox Code Playgroud)

我想工作需要在onQueryTextChange(String query)上面的方法中完成,但我不确定需要调用什么。我想调用SearchManagerstartSearch实例方法,但这似乎不是最佳实践。有没有人有任何类型到搜索的经验并愿意分享一个有效的解决方案?

更新:

MainActivity.java(可搜索的Activity

@Override
protected void onNewIntent(Intent intent) {
    setIntent(intent);

    if (Intent.ACTION_SEARCH.equals(intent.getAction())) {
        // Handle the search for a particular musical object
        final SearchFragment searchFragment = (SearchFragment) getFragmentManager().findFragmentByTag(SearchFragment.TAG);
        String query = intent.getStringExtra(SearchManager.QUERY);

        mWebService.searchTracks(query, new Callback<Pager>() {
            @Override
            public void success(Pager results, Response response) {
                Log.d(TAG, "Search response received.");
                searchFragment.updateItems(results);
            }
            @Override
            public void failure(RetrofitError retrofitError) {
                Log.e(TAG, "Search response failed: " + retrofitError.toString());
            }
        });
Run Code Online (Sandbox Code Playgroud)

上面的搜索界面设计是谷歌Android团队推荐的。

Rya*_*yan 2

到目前为止,我在阅读了几页文档后遇到的唯一解决方案是简单地发送带有操作Intent.ACTION_SEARCH和当前查询的意图,以便在的文本发生更改时SearchView启动可搜索。请记住,就设计而言,这可能不是最佳实践,但它确实有效。我将在稍后重新审视这种方法,如果我遇到任何新的情况,我会在这里报告。ActivitySearchViewSearchManager

@Override
public boolean onQueryTextChange(String query) {
     mSearchListAdapter.clear();
     if (!query.isEmpty()) {
          Intent searchIntent = new Intent(getActivity(), MainActivity.class);
          searchIntent.setAction(Intent.ACTION_SEARCH);
          searchIntent.putExtra(SearchManager.QUERY, query);
          startActivity(searchIntent);
     }
     return false;
}
Run Code Online (Sandbox Code Playgroud)