搜索建议不适用于首次运行的应用程序

时间:2014-04-27 13:44:42

标签: android searchview

我对主要活动中的搜索建议有疑问。有时建议不会出现在首次运行的应用程序中(例如对于新用户),当重新打开时,一切正常。

我发现第一次运行时有时不会触发内容提供程序查询。原因是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准备就绪并且(从用户的角度来看)建议会有效?

1 个答案:

答案 0 :(得分:0)

尝试使用:

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

重要的是让您的SearchActivity与您检索SearchableInfo的活动位于同一个包中。