Как обрабатывать обратный вызов от диспетчера поиска?
-
02-10-2019 - |
Вопрос
Давайте предположим следующее:
Activity A calls Search Manager
User searches, and search results are displayed in Activity B
User clicks on a list item in Activity B
App switches back to Activity A
Я не могу справиться с этим обратным вызовом из активности B к деятельности A, потому что у меня нет намерения диспетчера поиска (я думаю?).
Диспетчер поиска по вызову (в действии A)
public boolean onOptionsItemSelected(MenuItem item) {
// Handle item selection
switch (item.getItemId()) {
case R.id.add_symbol:
onSearchRequested(); //result of search will show Activity B
return true;
default:
return super.onOptionsItemSelected(item);
}
}
Вернуться к действию A После пользователя выбрал элемент списка
listView.setOnItemClickListener(new OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> a, View v, int position, long id) {
Quote myQuote = new Quote();
myQuote.name = (companies.get(position).name);
myQuote.symbol = (companies.get(position).symbol);
//TODO: add new quote to master quote list in Main
//TODO: serialize in Main
//TODO: go back to last activity
Intent myIntent = new Intent(getApplicationContext(), Main.class);
startActivityForResult(myIntent, PICK_COMPANY_REQUEST);
}
});
В активности обратно обратно:
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
if (requestCode == PICK_COMPANY_REQUEST) {
if (resultCode == RESULT_OK) {
Toast toast = Toast.makeText(getApplicationContext(), "Stock added", Toast.LENGTH_SHORT);
toast.show();
}
}
}
То PICK_COMPANY_REQUEST
никогда не отправляется на звонок обратно. Почему это? Я предполагаю, что в том, что диспетчер поиска есть намерение, а не мероприятие B. Как я могу убедиться, что это выздоравливает?
ОНИКТИВКАРЕСУЛЬ () никогда не вызывается. Почему?
Решение
Я действительно сомневаюсь, вы должны назвать новое намерение для вашей основной активности на вашем OnClickListener. Поскольку деятельность уже здесь, в стеке, вы можете просто закончить его
listView.setOnItemClickListener(new OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> a, View v, int position, long id) {
Quote myQuote = new Quote();
myQuote.name = (companies.get(position).name);
myQuote.symbol = (companies.get(position).symbol);
//TODO: add new quote to master quote list in Main
//TODO: serialize in Main
//TODO: go back to last activity
//You need to use setresult here and pass the intent
setResult(RESULT_OK, myIntent );
finish();
}
});
Другие советы
Я разместил ответ на то, что я думаю, та же проблема в Android OnsearchRequest () Обратный вызов к вызывающей активности
Скай это правильно, что onActivityResult
не вызывается, потому что деятельность A не запускает поисковую активность для результата.
Работать вокруг этого, я сделал деятельность А также определяется как поисковой активность (в манифесте), так что он получает поисковый намерение, а затем вручную запускать активность B с помощью startActivityForResult
, прохождение в запросе и позволит активности B обрабатывать поиск как обычно.
Вы можете увидеть мой ответ на ссылке выше или у меня есть Более детальная запись в этом сообщении в блоге.
OnactivityResult не вызывается, потому что StartactivityForresult не используется для запуска поисковой активности. Я также застрял с этой проблемой и еще предстоит найти решение!