Поиск предложений не работает при первом запуске приложения

У меня проблема с поисковыми предложениями в основной деятельности. Иногда предложения не появляются при первом запуске приложения (например, для новых пользователей), когда оно открывается, все работает нормально.

Я обнаружил, что запрос поставщика контента иногда не запускается при первом запуске. Причина этого заключается в том, что 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,

Другие вопросы по тегам