Получить результат от активности SearchManager в основной активности в Android - PullRequest
3 голосов
/ 18 ноября 2010

вариант использования: Деятельность А является основной деятельностью. Принимая во внимание, что действие B - SearcActivity (SearchManager). Действие B - это ListActivity, поэтому, какой бы ни был результат, результат отображается в списке. После того, как пользователь щелкнет по списку, я хочу вернуть выбранный элемент списка в ActivityA.

Что я сделал? Я мог бы вызвать SearchActivity для кнопки, используя «onSearchRequested ()». В ActivityB я отображаю результаты поиска через "setListAdapter (адаптер)". Используя «onListItemClick», я могу узнать, какая опция в списке была выбрана пользователем.

Теперь я попытался отправить результат обратно в ActivityA, используя следующий код

Intent intent = new Intent();
Bundle bundle = new Bundle();
bundle.putString("item", l.getItemAtPosition(position).toString());
intent.putExtras(bundle);
setResult(RESULT_OK, getIntent() );
finish();

И в ActivityA я попытался прочитать результат в «onActivityResult».

Bundle bundle = data.getExtras();
String strItem = bundle.getString("item");
AlertDialog alertDialog = new AlertDialog.Builder(this).create();
alertDialog.setTitle("Item Selected");
alertDialog.setMessage("Item = " + strItem);
alertDialog.setButton("OK", new DialogInterface.OnClickListener() {
 public void onClick(DialogInterface dialog, int which) {
  return;
 }
});
alertDialog.show();

Проблема: Я заметил, что после возобновления действия A «onActivityResult» вообще не вызывается. Следовательно, я не вижу никакого диалога. Кроме того, я не могу проверить, действительно ли SearchActivity отправляет что-либо в ActivityA.

Итак, друзья, как я могу получить данные, отправленные ActivityB.

Ответы [ 2 ]

2 голосов
/ 12 мая 2011

Я думаю, что это дубликат Как обрабатывать обратный вызов из Менеджера поиска? .

Марио Ленчи прав, что ваша деятельность B не начинается с startActivityForResult при вызове onSearchRequested().

См. мой ответ на этот вопрос здесь .По сути, вместо этого вы можете сделать операцию A поисковой активностью, чтобы получить запрос и вручную запустить операцию B для результата.

1 голос
/ 18 ноября 2010

Это вы, вероятно, хотели написать:

setResult(RESULT_OK, intent );

вместо

setResult(RESULT_OK, getIntent() );

см. Вызов функции?

...