Android 如何处理来自搜索管理器的回调?

Android 如何处理来自搜索管理器的回调?,android,android-activity,android-intent,android-searchmanager,Android,Android Activity,Android Intent,Android Searchmanager,让我们假设如下: 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中呼叫搜索管理器 用户选择列表项后返回活动A 选择公司请求永远不会发

让我们假设如下:

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中呼叫搜索管理器

用户选择列表项后返回活动A

选择公司请求永远不会发送回拨。为什么会这样?我之所以这样假设是因为搜索管理器有这个意图,而不是活动B。我如何确保调用它


onActivityResult从未被调用。为什么?

我真的怀疑你是否需要为你的主要活动调用一个新的意图。 因为活动已经在堆栈中,所以您可以直接完成它

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();
            }
        });

我发布了一个答案,回答了我认为同样的问题

Skype没有调用onActivityResult是正确的,因为活动A没有启动搜索结果的活动

为了解决这个问题,我将活动A也定义为清单中的可搜索活动,以便它接收搜索意图,然后使用startActivityForResult手动启动活动B,传递查询并让活动B正常处理搜索


您可以在上面的链接上看到我的回复,或者我有一个。

问题是,onActivityResult从未被调用。即使我尝试了你的setResult代码。这个问题已经解决了吗?或者你这里还有问题吗。在使用setResult之后,您是否也完成了当前的活动而没有调用活动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();
            }
        }
    }
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();
            }
        });