0

SearchWidget을 올바르게 구현하려고하지만 일부 문제가 있습니다. 호출하는 Activity에서 쿼리를 실행하는 Activity로 일부 정보를 전달해야하기 때문에 onSearchRequested()를 재정의합니다.SearchWidget이 onSearchRequested()를 호출하지 않습니다.

SearchWidget이 "포커스"를 잃어 버렸을 때만 발생합니다. 이것은 "집중된"SearchWidget을 의미합니다 : Focused SearchWidget SearchWidget (그리고 focues 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

시도 :

나는 보통의 의도를 사용하여 SearchView.OnQueryTextListener에서 내 검색 활동을 시작하여 결국
mSearchView.setFocusable(false); 
3

.

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); 
    }