2014-04-27 6 views
0

주 활동에 포함 된 검색 제안에 문제가 있습니다. 때로는 제안이 첫 번째 애플리케이션 실행 (예 : 신규 사용자)에 표시되지 않고 다시 열릴 때 모든 것이 올바르게 작동합니다.첫 번째 실행시 제안 검색이 작동하지 않습니다.

처음 실행하는 동안 콘텐츠 공급자 쿼리가 트리거되지 않는 경우가 있습니다. 그 이유는 searchManager.getSearchableInfo(getComponentName());이 때때로 null을 반환하기 때문입니다.

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_start); 

    mSearchView = (SearchView) findViewById(R.id.searchView); 
    SearchManager searchManager = (SearchManager) getSystemService(Context.SEARCH_SERVICE); 
    SearchableInfo searchableInfo = searchManager.getSearchableInfo(getComponentName()); 
    if(searchableInfo != null){ 
     setSearchableInfo(mSearchView, searchableInfo); 
    } else { 
     Log.d("Problem", "searchableInfo null"); 
     handle.postDelayed(waitAndRetry, 10000); 
    } 
} 

지연 후 다시 searchableInfo를 확인하여 수정했습니다.

Runnable waitAndRetry = new Runnable() { 
    @Override 
    public void run() { 
     Log.d("Problem", "retry after second"); 
     SearchManager searchManager = (SearchManager) getSystemService(Context.SEARCH_SERVICE); 
     SearchableInfo searchableInfo = searchManager.getSearchableInfo(getComponentName()); 
     setSearchableInfo(mSearchView, searchableInfo); 
    } 
}; 

이 지연으로 작업하고 있지만 활동이 시작될 때 SearchManager(?)이 완전히 준비되지 않았 음을 알게되었습니다. 나는 처음 실행하는 동안 db을 채우는 것과 관련이있을 것이라고 생각합니다. 그것은 오랜 조작 (100 밀리 초 이하)이 아니지만 그럴 수도 있습니다.

어쨌든, 내가 처음으로 활동을 시작할 때 SearchableInfo이 준비되고 (사용자 관점에서) 제안이 작동하는지 확인하는 방법이 있습니까? 사용

+0

FTS 가상 테이블을 사용하고 있습니까? – Squonk

+0

@ 스퀘크 예 – user2648394

답변

0

시도 :

SearchableInfo searchableInfo = searchManager.getSearchableInfo(new ComponentName(this, SearchActivity.class); 

중요한 것은이하는 것입니다 SearchActivity 당신이 SearchableInfo를 검색하는있는 활동과 같은 패키지입니다.

관련 문제