让我们假设以下内容:

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()从未被调用。为什么?

有帮助吗?

解决方案

我真的怀疑您是否需要为您的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 OnSearchRequested()回调为调用活动

天空是对的 onActivityResult 不称呼,因为活动A不会启动结果的搜索活动。

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

您可以在上面的链接上看到我的回答,或者我有一个 在此博客文章中更详细的文章.

没有调用onActivityResult,因为没有使用StartActivityForresult来启动搜索活动。我也遇到了这个问题,尚未找到解决方案!

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top