21

我正在尝试将数据从子活动发送给父母。但不知何故, onActivityResult(..) 没有被调用。这是代码

家长活动

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();
            }
        });
4

9 回答 9

92

对于遇到相同问题的任何人,没有收到的症状onActivityResult,以下情况可能会导致此问题。

  • 检查您是否startActivityForResult()正确使用,请勿使用startActivity().
  • 如果您在重写onBackPressed方法中执行某些操作,super.onBackPressed();则必须位于方法的最后,而不是第一行。(我的情况要花5个小时)
  • 在清单或等效参数中删除android:launchMode="singleInstance"以创建意图。
  • 在被调用者活动的清单中删除noHistory="true"
  • 检查setResult()错过了。
  • finish()被调用以关闭活动。用于finishActivity()关闭被调用者活动。
  • 使用requestCode大于零。负值不起作用。
于 2013-10-23T15:43:43.023 回答
12

我发现了错误。我在 manifest.xml 中有以下行用于儿童活动。

        android:launchMode="singleInstance"

删除此行后。它就像一个魅力!

谢谢大家的意见和建议。

于 2013-03-28T20:13:41.307 回答
2

我的情况有点复杂,我意识到我错误地使用了指向子活动中按钮侦听器的第一个实例的静态引用。

在第一轮它正在工作,但是当用户从父活动返回时,onActivityResult没有被调用。

替换静态引用是修复

于 2019-04-05T19:26:24.007 回答
1

不确定这是否是您的情况,但是在启动子活动时请确保使用startActivityForResult(intent), 而不是startActivity();

于 2013-03-28T18:45:12.560 回答
1

将我的调用活动清单从更改为android:launchMode="singleInstance"解决android:launchMode="singleTop"了我的问题。

于 2016-04-29T19:53:30.467 回答
1

用于启动新 Avtivity 的意图不能用标志设置Intent.FLAG_ACTIVITY_NEW_TASK,因为根据android 开发人员文档

当调用者从正在启动的活动中请求结果时,不能使用此标志。

于 2017-03-16T03:59:15.497 回答
1

使用singleTop而不是singleInstace作为launchMode,因为它在同一任务中维护活动。

于 2017-07-18T15:01:08.850 回答
0

onPause 正在影响 onActivityResult。

极端情况之一可能是:
我的情况不同而且很愚蠢:问题出在 onPause 中,finish调用并结束活动。删除它并运行良好。

@Override
protected void onPause() {
    super.onPause();
    finish(); // this line causing the issue removed it. 
}
于 2016-04-14T05:40:34.810 回答
-2

删除OnActivityResult()主类中的方法,它工作得很好...... MainActivity->>>>Fragments

于 2017-03-16T12:49:17.580 回答