Поиск предложений не работает при первом запуске приложения
У меня проблема с поисковыми предложениями в основной деятельности. Иногда предложения не появляются при первом запуске приложения (например, для новых пользователей), когда оно открывается, все работает нормально.
Я обнаружил, что запрос поставщика контента иногда не запускается при первом запуске. Причина этого заключается в том, что searchManager.getSearchableInfo(getComponentName());
иногда возвращает ноль.
@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 ответ
Попробуйте использовать:
SearchableInfo searchableInfo = searchManager.getSearchableInfo(new ComponentName(this, SearchActivity.class);
Важно иметь свой SearchActivity
в том же пакете, что и действие, из которого вы извлекаете SearchableInfo
,