0

SearchWidgetを正しく実装しようとしていますが、いくつかの問題に直面しています。 onSearchRequested()をオーバーライドする理由は、呼び出し側のアクティビティからクエリを実行するアクティビティにいくつかの情報を渡す必要があるためです。SearchWidgetがonSearchRequested()を呼び出さない

SearchWidgetが「フォーカス」を失った場合にのみ発生します。これは私が「集中した」SearchWidgetを意味するものです。 Focused SearchWidget SearchWidgetの外に触れることなく(そしてSearchWidgetを使って)onSearchRequested()が正しく呼び出されます。 BUT SearchWidgetの外側をタッチしてフォーカスを失うと、検索を実行するとonSearchRequested()メソッドが呼び出されません。 SearchWidget without focus

これはonSearchRequestedのコードである: @OverrideパブリックブールonCreateOptionsMenu(メニューメニュー){ MenuInflaterインフレータ= 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; 
} 

答えて

1

追加してみてください:

mSearchView.setFocusable(false); 
3

私は通常のテントを使用して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); 
    } 
関連する問題