177

FirstActivity.JavaFragmentA.Javaを呼び出す がありますstartActivityForResult()。 に書かれているが、呼び出されることはありませSecondActivity.Javaん。finish()onActivityResultFragmentA.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

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 のフラグメントの onActivityResult メソッドがトリガーされます。

于 2016-08-08T03:55:54.970 に答える
15

フラグメントにはすでに がありstartActivityForResult、これを使用するとフラグメントが呼び出さonActivityResultれますが、代わりにgetActivity()...

于 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 のCallメソッド

これがうまくいくことを願っています。

于 2017-10-14T15:11:23.140 に答える