【问题标题】:SearchWidget not calling onSearchRequested()SearchWidget 未调用 onSearchRequested()
【发布时间】:2012-05-10 23:39:33
【问题描述】:

我正在尝试正确实施SearchWidget,但我遇到了一些问题。我覆盖了onSearchRequested(),因为我需要将一些信息从调用活动传递给执行查询的Activity

仅当SearchWidget 失去其“焦点”时才会发生这种情况。这就是我所说的“专注”SearchWidget:

如果我在不接触SearchWidget 之外进行搜索(因此焦点SearchWidgetonSearchRequested() 被正确调用。 但是当我触摸SearchWidget 之外并失去焦点时,当我执行搜索时,不会调用方法onSearchRequested()

这是onSearchRequested的代码:

@Override
public boolean onCreateOptionsMenu(Menu menu) {
    MenuInflater inflater = getMenuInflater();
    inflater.inflate(R.menu.actionbar_mainscreen, menu);

    SearchManager searchManager = (SearchManager) getSystemService(Context.SEARCH_SERVICE);
    mSearchItem = menu.findItem(R.id.search);

    mSearchView = (SearchView) mSearchItem.getActionView();
    mSearchView.setSearchableInfo(searchManager.getSearchableInfo(getComponentName()));
    mSearchView.setIconifiedByDefault(true);

    return true;
}

public boolean onOptionsItemSelected(MenuItem item) {
    switch(item.getItemId()){
        case R.id.search:
            onSearchRequested();
            break;
        case R.id.mainscreen_favorites:
            Intent intent = new Intent(this, FavoritesActivity.class);
            startActivity(intent);
            break;
    }
    return true;
}

@Override
public boolean onSearchRequested() {
    Bundle appData = new Bundle();
    appData.putInt(Constants.EXTRA_CATEGORY, index);
    startSearch(null, false, appData, false);
    return true;
}

【问题讨论】:

    标签: android android-widget android-view android-actionbar android-searchmanager


    【解决方案1】:

    我最终使用普通 Intent 从 SearchView.OnQueryTextListener 开始搜索活动。

    searchView.setOnQueryTextListener(new SearchView.OnQueryTextListener() {
        @Override
        public boolean onQueryTextSubmit(String query) {
          startSearch(query);
          return true;
        }
    
        @Override
        public boolean onQueryTextChange(final String s) {
          return false;
        }
      });
    
      private void startSearch(final String query) {
        // Doesn't call through onSearchRequest
        Intent intent = new Intent(this, SearchActivity.class);
        intent.putExtra(Keys.CATALOG, getCatalogID());
        intent.putExtra(Keys.HAS_ARTICLES, hasArticles);
        intent.putExtra(Keys.QUERY, query);
        startActivity(intent);
      }
    

    【讨论】:

      【解决方案2】:

      尝试添加:

      mSearchView.setFocusable(false);
      

      【讨论】:

        猜你喜欢
        • 2012-09-15
        • 2011-06-16
        • 2012-09-19
        • 2015-01-15
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2012-07-01
        • 2015-09-14
        相关资源
        最近更新 更多