代码之家  ›  专栏  ›  技术社区  ›  Sheehan Alam

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

  •  2
  • Sheehan Alam  · 技术社区  · 15 年前

    假设如下:

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

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

    在活动A中,处理回拨:

    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

    从未调用onActivityResult()。为什么?

    3 回复  |  直到 15 年前
        1
  •  0
  •   DeRagan    15 年前

    我真的怀疑你是否需要为你在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();
                }
            });
    
        2
  •  5
  •   Community Mohan Dere    8 年前

    我贴出了一个答案,我认为是在同一个问题 Android onSearchRequested() callback to the calling activity

    天空是对的 onActivityResult 未调用,因为活动A未启动搜索结果的活动。

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

    你可以在上面的链接看到我的回复,或者我有一个 more detailed write-up in this blog post .