Как передать дополнительные переменные во время поиска, вызванного SearchView / Widget?

Я успешно использую виджет поиска в своей панели действий, чтобы выполнить поиск, следуя этому руководству . Поиск в порядке, но мне интересно, как передать дополнительные переменные в поиске. В тех же onSearchRequested() я могу переопределить onSearchRequested() , но это не похоже на работу с onSearchRequested() поиска.

Мое приложение падает при создании класса поиска, потому что appData всегда равно null .

Заметка

onSearchRequested() вызывается , но пакет не onCreate() в мой onCreate() .

Все дополнительные данные из пройденного намерения – {user_query=my-query, query=my-query} .

Solutions Collecting From Web of "Как передать дополнительные переменные во время поиска, вызванного SearchView / Widget?"

Кажется, единственный способ сделать это – перехватить новые действия, созданные в вашей деятельности, которые доступны для поиска. Для этого мы переопределим метод startActivity() . Затем мы можем проверить, чтобы активность была действительно активностью поиска, а затем добавила дополнительную возможность. Ниже приведен рабочий код.

 @Override public void startActivity(Intent intent) { // check if search intent if (Intent.ACTION_SEARCH.equals(intent.getAction())) { intent.putExtra("KEY", "VALUE"); } super.startActivity(intent); } 

Затем вы можете захватить дополнительные ресурсы, как и любые другие дополнительные операции поиска, используя:

 mValue = intent.getStringExtra("KEY"); 

Я думаю, вы хотите просто использовать

String value = intent.getStringExtra(SearchManager.APP_DATA);

Потому что намерение содержит пакет, который вы передали, чтобы начать поиск.

Вы можете переопределить метод onSearchRequested внутри Activity который вызывает поиск.

 @Override public boolean onSearchRequested() { Bundle appData = new Bundle(); appData.putBoolean(SearchableActivity.JARGON, true); startSearch(null, false, appData, false); return true; } 

То вы можете извлечь эти данные внутри SearchableActivity

 Bundle appData = getIntent().getBundleExtra(SearchManager.APP_DATA); if (appData != null) { boolean jargon = appData.getBoolean(SearchableActivity.JARGON); }