2

假设如下:如何处理来自搜索管理器的回调?

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从不发送回电话。为什么是这样?我假设,因为搜索管理器有意图,而不是活动B.我怎样才能确保这被调用?

onActivityResult()永远不会被调用。为什么?

回答

0

我真的怀疑您是否需要在您的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(); 
      } 
     }); 
+0

问题是,onActivityResult()永远不会被调用。即使我尝试你的setResult()代码。 – 2010-08-30 17:34:42

+0

此问题是否已解决,或者您是否仍然有问题。在使用setResult之后,您是否还完成了()当前的Activity而不调用Activity A的意图? – DeRagan 2010-08-31 04:50:56

1

onActivityResult不叫,因为startActivityForResult不用于启动搜索活动。我也遇到了这个问题,还没有找到解决方案!

4

我张贴的答案,我认为是在Android onSearchRequested() callback to the calling activity

Skythe同样的问题是正确的,onActivityResult不叫,因为活动A没有启动,对于结果的搜索活动。

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

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

+1

你是对的!您的博客中描述的方式运作良好。 – 2011-10-11 14:10:56