183 votes

startActivityForResult() à partir d'un Fragment et d'une Activité enfant finissante, n'appelle pas onActivityResult() dans le Fragment

FirstActivity.Java a un FragmentA.Java qui appelle startActivityForResult() . SecondActivity.Java appelez finish() mais onActivityResult ne sont jamais appelés, ce qui est écrit dans FragmentA.Java .

FragmentA.Java code :

  @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 code :

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

J'ai essayé de déboguer le code, mais onAcitvityResult() ne sont jamais appelés.

1 votes

Essayez de la placer (méthode onActivityResult) dans la classe FirstActivity.

2 votes

6voto

sanjaymith Points 206

Nous pourrions appeler startActivityForResult() directement à partir du Fragment Vous devez donc appeler this.startActivityForResult(i, 1); au lieu de getActivity().startActivityForResult(i, 1);

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

L'activité enverra le résultat de l'activité à votre fragment.

2voto

Il est peut-être tard pour la réponse. Mais elle sera utile à tous.

Dans mon cas, je veux appeler une activité à partir d'un fragment et renvoyer le résultat à partir du fragment.

J'ai utilisé getContext de Fragment Like.

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

And Set Result from Fragment

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

Obtenir maintenant le résultat de la fragmentation avec

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

    }
}

1voto

White Clover Points 1

Essaie juste ça :

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

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

0voto

dileep krishnan Points 107

OnActivityResult() de MAinActivity sera appelé, onActivityResult() de Fragement ne sera pas appelé parce que le fragment est placé dans l'activité, donc évidemment il revient à MainActivity.

-2voto

N'appelez pas finish() sur onCreate() alors cela fonctionne bien.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X