#android
#Android
Вопрос:
Я использую SearchView для обработки поиска в приложении. Всякий раз, когда поиск выполняется из SearchActivity, метод onNewIntent вызывается дважды. Хотя, если поиск выполняется из других действий, onNewIntent будет вызван только один раз.
Почему onNewIntent вызывается дважды из SearchActivity?
Вот соответствующий код и конфигурация из приложения.
Манифест
<activity
android:name=".MainActivity"
android:theme="@style/AppTheme.NoActionBar.NoActionBar">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
<meta-data
android:name="android.app.default_searchable"
android:value=".SearchResultsActivity" />
</activity>
<activity
android:name=".SearchActivity"
android:launchMode="singleTop"
android:parentActivityName=".MainActivity">
<intent-filter>
<action android:name="android.intent.action.SEARCH" />
</intent-filter>
<meta-data
android:name="android.app.searchable"
android:resource="@xml/searchable" />
</activity>
<activity
android:name=".ui.browse.BrowseActivity"
android:parentActivityName=".MainActivity" />
onCreateOptionsMenu всех действий
public boolean onCreateOptionsMenu(Menu menu) {
getMenuInflater().inflate(R.menu.options_menu, menu);
// Associate searchable configuration with the SearchView
SearchManager searchManager = (SearchManager) getSystemService(Context.SEARCH_SERVICE);
SearchView searchView = (SearchView) menu.findItem(R.id.search).getActionView();
searchView.setSearchableInfo(searchManager.getSearchableInfo(new ComponentName(this, SearchActivity.class)));
searchView.setQueryHint(getResources().getString(R.string.search_hint));
return super.onCreateOptionsMenu(menu);
}
SearchActivity
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_search_results);
Toolbar toolBar = findViewById(R.id.searchActivityToolBar);
setSupportActionBar(toolBar);
getSupportActionBar().setDisplayHomeAsUpEnabled(true);
}
@Override
protected void onNewIntent(Intent intent) {
super.onNewIntent(intent);
handleSearch(intent); // perform search
}
Ответ №1:
Похоже, в эмуляторах Android есть ошибка, которая вызывает дополнительный onNewIntent для функций поиска, реализованных с помощью SearchView.
Такое поведение не встречается на реальных устройствах.