我对主活动中的搜索建议有问题。有时建议不会出现在应用程序的第一次运行中(例如为新用户),当它重新打开时,一切都很好。
我发现内容提供者查询有时在第一次运行时不会被触发。原因是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
已经准备好了,并且(从用户的角度来看)建议会起作用?
尝试使用:
SearchableInfo searchableInfo = searchManager.getSearchableInfo(new ComponentName(this, SearchActivity.class);
重要的是将SearchActivity
与从中检索SearchableInfo
的活动放在同一个包中。