Вопрос

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

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 не используется для запуска поисковой активности. Я также застрял с этой проблемой и еще предстоит найти решение!

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top