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);
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.
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.
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.
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
}
J'ai résolu mon problème en supprimant Android:noHistory="true"
de AndroidManifest.xml
.
J'ai eu le même problème. Mon activité d'appel était "singleInstance". Supprimer cela a résolu mon problème.
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.
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
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);
Suppression de cette ligne et de son bon fonctionnement.
intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
Merci pour un indice.
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é.
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"