0

我試圖正確實現SearchWidget,但我正面臨一些問題。我重寫onSearchRequested()是因爲我需要將一些信息從調用Activity傳遞到執行查詢的Activity。SearchWidget not calling onSearchRequested()

只有當SearchWidget失去「焦點」時纔會發生。這就是我的意思是「專注」SearchWidget: Focused SearchWidget 如果我搜索時沒有觸及SearchWidget以外(和SearchFidget一樣SearchWidget)onSearchRequested()被正確調用。 但是當我在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); 
    }