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