177

FirstActivity.Java有一个FragmentA.JavastartActivityForResult(). SecondActivity.Java调用finish()onActivityResult永远不会被调用,这是用FragmentA.Java.

FragmentA.Java代码:

  @Override
  public void onActivityCreated(Bundle savedInstanceState) {
    super.onActivityCreated(savedInstanceState);
    // some code
    Intent i = new Intent(getActivity(), SecondActivity.class);
    i.putExtra("helloString", helloString);
    getActivity().startActivityForResult(i, 1);
  }

  @Override
  public void onActivityResult(int requestCode, int resultCode, Intent data) {
    super.onActivityResult(requestCode, resultCode, data);
    getActivity();
    if(requestCode == 1 && resultCode == Activity.RESULT_OK) {
       //some code
    }
  }

SecondActivity.Java代码:

  @Override
  protected void onCreate(Bundle savedInstanceState) {
       super.onCreate(savedInstanceState);
       //some code
       Intent returnIntent = new Intent();
       returnIntent.putExtra("result", result);                          

       setResult(Activity.RESULT_OK,returnIntent);     
       finish();
  }

我曾尝试调试代码,但从onAcitvityResult()未被调用。

4

10 回答 10

288

你必须写onActivityResult()在你FirstActivity.Java的如下

@Override
public void onActivityResult(int requestCode, int resultCode, Intent data) {
   super.onActivityResult(requestCode, resultCode, data);
}

所以这将调用你的片段onActivityResult()

编辑:解决方案是替换getActivity().startActivityForResult(i, 1);startActivityForResult(i, 1);

于 2013-06-13T11:25:19.257 回答
33

凯文的答案有效,但使用该解决方案很难处理数据。

最好的解决方案是不要从startActivityForResult()活动级别开始。

在你的情况下不要打电话getActivity().startActivityForResult(i, 1);

相反,只需使用startActivityForResult()它就可以正常工作!:)

于 2014-01-13T22:20:52.840 回答
28

您必须在 FirstActivity.Java 中编写 onActivityResult(),如下所示

@Override
public void onActivityResult(int requestCode, int resultCode, Intent data) {
    for (Fragment fragment : getSupportFragmentManager().getFragments()) {
        fragment.onActivityResult(requestCode, resultCode, data);
    }
}

这将触发 FirstActivity.java 上 Fragments 的 onActivityResult 方法

于 2016-08-08T03:55:54.970 回答
15

片段已经有,如果你使用它startActivityForResult会调用片段,而不是...onActivityResultgetActivity()

于 2015-12-23T08:35:16.467 回答
9

最重要的是,这里缺少的是... FirstActivity 的launchMode 必须是singleTop。如果是singleInstance,FragmentA中的onActivityResult会在调用startActivityForResult方法后被调用。因此,它不会等待调用 SecondActivity 中的 finish() 方法。

因此,请执行以下步骤,经过长时间的研究,它肯定会像它一样对我有用。

在AndroidManifest.xml 文件中,将FirstActivity.Java 的launchMode 设为singleTop。

<activity
        android:name=".FirstActivity"
        android:label="@string/title_activity_main"
        android:launchMode="singleTop"
        android:theme="@style/AppTheme.NoActionBar" />

在 FirstActivity.java 中,覆盖 onActivityResult 方法。因为这将调用 FragmentA 的 onActivityResult。

@Override
public void onActivityResult(int requestCode, int resultCode, Intent data) {
    super.onActivityResult(requestCode, resultCode, data);
}

在 FragmentA.Java 中,覆盖 onActivityResult 方法

@Override
public void onActivityResult(int requestCode, int resultCode, Intent data) {
    Log.d("FragmentA.java","onActivityResult called");
}

startActivityForResult(intent, HOMEWORK_POST_ACTIVITY);从 FragmentA.Java调用

finish();SecondActivity.java 中的调用方法

希望这会奏效。

于 2017-10-14T15:11:23.140 回答
6

我们可以startActivityForResult()直接从 Fragment 调用所以你应该调用this.startActivityForResult(i, 1);而不是getActivity().startActivityForResult(i, 1);

Intent i = new Intent(getActivity(), SecondActivity.class);
i.putExtra("helloString", helloString);
this.startActivityForResult(i, 1);

Activity 会将 Activity Result 发送到您的 Fragment。

于 2017-02-17T06:48:56.843 回答
2

可能答案已经晚了。但对任何人都有帮助。

在我的情况下,想从 Fragment 调用活动并从 Fragment 返回 setResult。

我使用了 Fragment Like 的 getContext。

startActivityForResult(new Intent(getContext(), NextActivity.class), 111);

并从片段中设置结果

getActivity().setResult(Activity.RESULT_OK);
                    getActivity().finish();

现在将结果分解为

@Override
public void onActivityResult(int requestCode, int resultCode, Intent data) {
    super.onActivityResult(requestCode, resultCode, data);
    if (resultCode == Activity.RESULT_OK && requestCode == 111) {

    }
}
于 2019-10-07T12:55:12.093 回答
0

MAinActivity 的 onActivityResult() 将调用,Fragment 的 onActivityResult() 不会调用,因为片段被放置在 Activity 中,所以很明显它会回到 MainActivity

于 2018-02-02T05:07:35.363 回答
0

试试这个:

//don't call getActivity()
getActivity().startActivityForResult(intent, REQ_CODE);

//just call 
startActivityForResult(intent, REQ_CODE);
//directly from fragment

于 2021-01-11T14:29:22.090 回答
-2

不要调用方法然后它工作正常finish()onCreate()

于 2017-09-21T16:09:28.103 回答