2014-07-08 47 views
0

我有活動A.的Android onActivityResult未能進入方法

稱爲在活動的AN活動B:

intent = new Intent (MainActivity.this, SelectionActivity.class); 
startActivityForResult(intent, RESULT_OK); 

在活動B(它是關於被點擊的項目時,一個ListView):

@Override 
    public void onItemClick(AdapterView<?> arg0, View arg1, int arg2, 
    long arg3) { 
       // TODO Auto-generated method stub 
       TextView tv = (TextView)arg0.getChildAt(arg2); 
       String key = tv.getText().toString(); 
       Intent myIntent = new Intent(); 
       myIntent.putExtra("genre", key); 
       setResult(RESULT_OK,myIntent); 
       finish(); 
      } 

而且我重寫onActivityResult方法像這樣在一個:

protected void onActivityResult(int requestCode, int resultCode, Intent data) { 
      super.onActivityResult(requestCode, resultCode, data); 
      if (resultCode == RESULT_OK) { 
       if (data != null) { 
       Bundle b = data.getExtras(); 
       String str = b.getString("genre"); 
       Log.v("nope","loaded ! " + str); 
       r.LoadGenre(str); 
       } 
       Log.v("nope"," not loaded ! "); 
      } 
     } 

但我從來沒有達到任何這些「Log.v」消息。 我不明白爲什麼。 LogCat清晰,沒有錯誤。 運行時,A完美地啓動B,當在B上點擊項目時,B完美地關閉以返回到A ...

回答

1

您確實需要將request code傳遞給startActivityForResult()方法。
「請求代碼」標識您的請求。當您收到結果Intent時,回調會提供相同的請求代碼,以便您的應用程序可以正確識別結果並確定如何處理結果。

你的情況,你沒有檢查與requestcode

接收到的結果因此,檢查requestCode也在你onActivityResult method.So變化

startActivityForResult(intent, RESULT_OK); 

startActivityForResult(intent, 200); 

if (resultCode == RESULT_OK) { 

if (requestCode == 200 && resultCode == RESULT_OK) { 
+0

它的工作。這是爲什麼發飆? 當你調用OnActivityResult時,A是否再次調用「OnCreate」?如果沒有,如何使它呼叫? – user3745776

+0

對不起,編輯我的評論在那裏 – user3745776

+0

@ user3745776不,在創建時只調用活動創建,並且在OnActivityResult中不會調用onCreate,因爲您的活動A在Activity的堆棧中。 –