2013-03-28 65 views
11

我想從孩子活動發送數據到父母。但不知何故,onActivityResult(..)沒有被調用。這裏是代碼onActivityResult方法不被調用Android

父活動

selectedText.setOnTouchListener(new OnTouchListener() { 



    public boolean onTouch(View v, MotionEvent event) { 
        if (event.getActionMasked() == MotionEvent.ACTION_DOWN) { 
         Intent intent = new Intent(Parents.this,Child.class); 
         startActivityForResult(intent, 1); 
        } 
        return true; 
       } 
      }); 


     @Override 
     protected void onActivityResult(int requestCode, int resultCode, Intent data) { 
      switch (requestCode) { 
      case 1: 
       if (resultCode == RESULT_OK) { 
        if (data.hasExtra("selText")) { 
         selectedText.setText(data.getExtras().getString(
           "selText")); 

        } 
        break; 
       } 
      } 

子活動:我可以看到()選擇的值在設定的setResult。但在孩子活動結束後,這不會回到父母的活動。

textListView.setOnItemClickListener(new OnItemClickListener() { 

      @Override 
      public void onItemClick(AdapterView<?> arg0, View arg1, int myItemInt, 
        long arg3) { 
       selectedFromList =(String) (textListView.getItemAtPosition(myItemInt)); 
       Intent data = new Intent(); 
       data.putExtra("selText", selectedFromList); 
       setResult(RESULT_OK,data); 
       finish(); 
      } 
     }); 
+0

在嘗試在子活動中嘗試Intent data = getIntent()後沒有工作 – Chintan

+0

嘗試在'onActivityResult()'中添加一些'System.out.println()'來查看實際正在執行的代碼。一旦你縮小它,你應該能夠找出問題。如果沒有,請編輯您的帖子並告訴我們哪些行正在執行。 – Don

+0

因此,當我觸摸事件正在被調用的父活動..它進入onTouch(),當它執行startActivityForResult(intent,1)行,它去onActivityResult()與請求代碼是1.之後,它跳轉到子活動並加載它。從ChildActivity.OnItemClick()中選擇值後,它完成了子活動,但從未返回到父級的onActivityResult()。希望它很清楚 – Chintan

回答

10

我發現了錯誤。我在manifest.xml中爲child activity設置了下面的行。

 android:launchMode="singleInstance" 

刪除此行後。它的工作就像一個魅力!

謝謝大家的意見和建議。

+0

這個解決了和我一樣的問題。 +1 – JayR

+1

我有單題。將其更改爲singleTop解決了問題。 –

0

不知道這是你的情況,但在啓動子活動時,請確保您使用startActivityForResult(intent),而不是startActivity();

+0

我正在使用Intent intent = new Intent(Parents.this,Child.class); startActivityForResult(intent,1); – Chintan

+0

唯一的額外部分父活動具有低於方法 \t @Override \t保護無效的onPause(){ \t \t this.overridePendingTransition(R.anim.fade,R.anim.fade_right); \t \t this.overridePendingTransition(R.anim.right_in,R.anim.right_out); \t \t super.onPause(); \t} – Chintan

+0

我測試了你的代碼,它在我身邊正常工作。我能夠從Child活動傳遞數據並在onActivityResult中接收它。也許selectedItemList是空的? –

51

對於任何人遇到同樣的問題,症狀不會收到onActivityResult,以下情況可能導致此問題。

  • 檢查您是否正確使用startActivityForResult(),請勿使用startActivity()
  • 如果您在重寫方法onBackPressed方法中做了某些操作,則super.onBackPressed();必須位於方法的最後一個位置,而不是位於第一行。 (我的情況花費5小時)
  • 刪除android:launchMode="singleInstance"以清單或等價的參數創建一個意圖。
  • 刪除noHistory="true"顯示被調用者的活動。
  • 檢查setResult()錯過了。
  • 被調用來關閉該活動。使用finishActivity()關閉被動活動。
  • 使用requestCode大於零。負值不起作用。
+0

這是非常有用的列表來檢查。謝謝 – Metatron

+0

我的情況是設置被調用的活動「android:launchMode =」singleTask「」,並刪除它工作:) – bony

+0

非常感謝 – Piyush

0

OnPuase影響了活動結果。

一個角落情況可能是:
我的情況是不同的,愚蠢的:問題是在onPause,完成調用,結束活動。刪除和運作良好。

@Override 
protected void onPause() { 
    super.onPause(); 
    finish(); // this line causing the issue removed it. 
} 
1

更改我的清單從android:launchMode="singleInstance"android:launchMode="singleTop"調用活動固定我的問題。

-1

和意圖是用來啓動新的活性起着不能設置標誌Intent.FLAG_ACTIVITY_NEW_TASK,因爲每android developer文件爲:

當主叫用戶請求從 結果的活動正在展開這個標誌不能被使用。

+0

您的答案中的鏈接需要更正鏈接文本,謝謝。 –

-1

在主類中刪除OnActivityResult()方法,它完美... MainActivity - >>>>片段

1

使用singleTop而不是singleInstacelaunchMode因爲它維持活動在同一個任務中。