onActivityResult方法没有被称为Android

时间:2013-03-28 18:22:43

标签: android android-activity

我正在尝试将子活动的数据发送到父级。但不知何故,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();
            }
        });

9 个答案:

答案 0 :(得分:76)

对于遇到相同问题的任何人,如果出现onActivityResult症状,以下情况可能会导致此问题。

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

答案 1 :(得分:10)

我发现了错误。我在manifest.xml的下面有一行用于子活动。

        android:launchMode="singleInstance"
删除此行后

。它的工作就像一个魅力!

感谢大家的意见和建议。

答案 2 :(得分:1)

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

答案 3 :(得分:1)

用于启动新Avtivity的意图无法使用标记Intent.FLAG_ACTIVITY_NEW_TASK进行设置,因为根据android developer documentation

  

当呼叫者请求结果时,不能使用此标志   正在推出的活动。

答案 4 :(得分:1)

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

答案 5 :(得分:0)

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

答案 6 :(得分:0)

onPause影响onActivityResult。

其中一个角落案例可能是:
我的情况不同而且很愚蠢:问题出在onPause上,finish调用并结束活动。删除它并且运行良好。

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

答案 7 :(得分:0)

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

一开始它是有效的,但是当用户从父级活动返回时,onActivityResult没有被调用。

替换静态引用是解决方法

答案 8 :(得分:-1)

删除主类中的OnActivityResult()方法,它完美运行... 的 MainActivity-&GT;&GT;&GT;&GT;片段