web-dev-qa-db-fra.com

onActivityResult () non appelé

onActivityResult() n'est pas appelé. Voici mon code:

@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
    // Check which request we're responding to

    Log.e("CALLED", "OnActivity Result");

    if (requestCode == TEAM_SELECTED_REQUEST_CODE) {
        // Make sure the request was successful
        if (resultCode == RESULT_OK) {
            try {
                 mySelectedTeam = getIntent().getStringExtra("teamName");
                txtSelectTeamCreateMatch.setText(mySelectedTeam);
            } catch (Exception e) {
                e.printStackTrace();
            }
        }
    }
}

Voici que je commence le SelectTeamActivity:

Intent intent=new Intent(CreateMatch.this,SelectTeamActivity.class);
startActivityForResult(intent, TEAM_SELECTED_REQUEST_CODE);
//overridePendingTransition(R.anim.fade_in, R.anim.fade_out);
overridePendingTransition(R.anim.Push_up_in, R.anim.Push_up_out);

Intent intent = getIntent();
intent.putExtra("teamID", teamDataList.get(position).getTeamId().toString());
intent.putExtra("teamName", teamDataList.get(position).getTeamName().toString());
setResult(1, intent);
27
Parin Parikh

onActivityResult appelé mais utilisant une référence d'intention incorrecte pour obtenir les données de l'intention de résultat:

getIntent().getStringExtra("teamName")

Remplacez par ceci:

data.getStringExtra("teamName")

Ici, les données sont une intention de résultat.

4
Haresh Chhelana

Option 1 :

Si vous appelez startActivityForResult() à partir de Fragment, vous devez appeler startActivityForResult() et non getActivity().startActivityForResult(), car cela entraînera Fragment's onActivityResult().

Si vous ne savez pas où vous appelez startActivityForResult() et comment vous appellerez les méthodes.

Option 2:

Puisque Activity obtient le résultat de onActivityResult(), vous devrez remplacer la onActivityResult() de Activity et appeler super.onActivityResult() pour la propager les Fragment respectifs pour les codes de résultats non gérés ou pour tous.

Si au-dessus de 2 options ne fonctionnent pas, référez-vous à l'option 3 car cela fonctionnera certainement.

Option 3:

Appel explicite de Fragment à onActivityResult() fonction comme suit

Dans la classe parent Activity, remplacez la fonction onActivityResult() et même remplacez-la dans la classe Fragment et appelez le code suivant.

En classe parent:

@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
    Fragment fragment = getSupportFragmentManager().findFragmentById(R.id.dualPane);
    fragment.onActivityResult(requestCode, resultCode, data);
}

En classe enfant:

@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
   //in fragment class callback
}
76
Akash Moradiya

J'ai résolu mon problème en supprimant Android:noHistory="true" de AndroidManifest.xml.

11
Android Dev

J'ai eu le même problème. Mon activité d'appel était "singleInstance". Supprimer cela a résolu mon problème.

8
spgodara

Je viens d'avoir le même problème et je suis surpris qu'aucune des solutions que j'ai examinées n'ait mentionné ce qui suit:

La valeur de la constante RESULT_OK est -1, et si vous donnez la valeur 1 dans la méthode setResult, le code de résultat ne serait pas égal à RESULT_OK et la condition ne serait pas traitée. J'espère que quelqu'un trouve cela utile.

3
Harsha

J'ai eu le même problème et j'ai résolu cela en ajoutant ces paramètres à l'activité:

AlwaysRetainTaskState = true, LaunchMode = Android.Content.PM.LaunchMode.SingleTop
1
Masoud

Après avoir renvoyé la réponse de @spgodara.

J'ai ci-dessous AndroidManifest.xml pour ma classe SecondActivity:

<activity Android:name=".SecondActivity"
            Android:launchMode="singleTask"
            Android:screenOrientation="portrait"
            Android:theme="@style/AppThemeHome"
        Android:windowSoftInputMode="adjustResize"/>

J'ai mis simple Toast pour trouver quand le rappel onActivityResult de MainActivity est appelé. J'ai trouvé que c'était juste appelé lors de la création de SecondActivity (à l'ouverture de SecondActivity). Cela fonctionne très bien sur l'appareil Redmi Note avec Marshmallow, mais ne fonctionne pas sur l'appareil KitKat.

Après avoir supprimé sous la ligne de la décélération AndroidManifest.xml mentionnée ci-dessus:

Android:launchMode="singleTask"

et appeler l'intention comme ci-dessous a fonctionné pour moi:

 Intent intent = new Intent(this, SecondActivity.class);
                intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
                startActivityForResult(intent, SECOND_ACTIVITY_REQUEST_CODE);
1
pradip tilala

Suppression de cette ligne et de son bon fonctionnement.

intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);

Merci pour un indice.

0

J'ai eu un problème similaire et mon problème concernait le paramètre requestCode qui était défini sur -1 dans la méthode startActivityForResult. Donc quand j'ai changé la valeur de requestCode en 1 ou 0 onActivityResult a commencé à être appelé.

0
Arsenius

Après avoir examiné le pradip tilala's réponse , j'ai résolu mon problème en supprimant la ligne ci-dessous d'AndroidManifest.xml

Android:noHistory="true"
0
Pooja