Как обработать обратный вызов из менеджера поиска? - PullRequest
2 голосов
/ 30 августа 2010

Давайте предположим следующее:

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. Как я могу убедиться, что это вызывается?

onActivityResult () никогда не вызывается.Почему?

Ответы [ 3 ]

5 голосов
/ 11 мая 2011

Я отправил ответ на то, что, по моему мнению, является той же проблемой, на Android onSearchRequested () обратный вызов на вызывающее действие

Skythe прав, что onActivityResult не вызывается, потому что ActivityA не запускает поисковое действие для результата.

Чтобы обойти это, я сделал Задание A, также определенное как доступное для поиска actvity (в манифесте), чтобы оно получало поисковое намерение и затем запускало вручнуюЗадание B с startActivityForResult, передача запроса и разрешение заданию B обрабатывать поиск как обычно.

Мой ответ вы можете увидеть по ссылке выше, или у меня есть более подробное описание в этомсообщение в блоге .

1 голос
/ 29 января 2011

onActivityResult не вызывается, потому что startActivityForResult не используется для запуска операции поиска.Я тоже застрял в этой проблеме и пока не нашел решения!

0 голосов
/ 30 августа 2010

Я действительно сомневаюсь, нужно ли вам вызывать новое намерение для вашей основной деятельности на вашем 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();
            }
        });
...