2013-03-28 68 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因为它维持活动在同一个任务中。