Получение результата от действия, начатого с SearchManager
Я следую этому относительно простому руководству о том, как вручную запустить SearchableActivity
так что я могу получить result
назад от этого.
Он в основном настраивает базу Activity
(Действие A) в качестве поисковой активности (в манифесте), так что она получает цель поиска и затем вручную запускает реальный поиск Activity
(Деятельность Б) с startActivityForResult
,
После изменения манифестов у него есть только один блок кода. Мой вопрос:
Где вы положили этот код?
private void handleIntent(Intent intent) {
// Get the intent, verify the action and get the query
if (Intent.ACTION_SEARCH.equals(intent.getAction())) {
String query = intent.getStringExtra(SearchManager.QUERY);
// manually launch the real search activity
final Intent searchIntent = new Intent(getApplicationContext(),
MySearchActivity.class);
// add query to the Intent Extras
searchIntent.putExtra(SearchManager.QUERY, query);
startActivityForResult(searchIntent, ACTIVITY_REQUEST_CODE);
}
Activity
А или Б? И где ты это называешь?
ДОПОЛНИТЕЛЬНАЯ ИНФОРМАЦИЯ - Как я делаю это в настоящее время - это вырезано?
@Override
public boolean onCreateOptionsMenu(Menu menu) {
MenuInflater inflater = getSupportMenuInflater();
inflater.inflate(R.menu.menu, menu);
MenuItem searchItem = menu.findItem(R.id.menu_search);
SearchManager searchManager = (SearchManager) getSystemService(Context.SEARCH_SERVICE);
if (Build.VERSION.SDK_INT < Build.VERSION_CODES.HONEYCOMB) {
SearchView searchView = (SearchView) searchItem.getActionView();
searchView.setSearchableInfo(searchManager
.getSearchableInfo(getComponentName()));
searchView.setIconifiedByDefault(true);
} else if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.HONEYCOMB) {
setupNewSearchView(searchItem, searchManager);
}
return true;
}
@TargetApi(Build.VERSION_CODES.HONEYCOMB)
private void setupNewSearchView(final MenuItem searchItem, SearchManager searchManager) {
android.widget.SearchView searchView = (android.widget.SearchView) searchItem.getActionView();
searchView.setSearchableInfo(searchManager.getSearchableInfo(getComponentName()));
searchView.setIconifiedByDefault(true);
}
1 ответ
Сначала создайте Activity(A) singleInstance/singleTop в manifest.xml android:launchMode="singleInstance|singleTop"
затем используйте onNewIntent(Intent intent)
из действия (A) для обработки намерения (намерения)
Редактировать:
ActivityA.java
@Override
protected void onNewIntent(Intent intent) {
handleIntent(intent);
}
Пожалуйста, прочитайте этот учебник, чтобы получить полное ясное представление о том, что происходит