Android onActivityResult JAMAIS appelé
ma méthode onActivityResult n'est jamais appelée. suis avec android 2.2
Je suis à l'aide d'un Tabhost, où TabHosts contenir TabGroups qui contiennent des Activités individuelles.
Une de mes activité individuelle exécute intention
Intent intent = new Intent();
intent.setType("image/*");
intent.setAction(Intent.ACTION_GET_CONTENT);
startActivityForResult(Intent.createChooser(intent,
"Select Picture"), 0);
cette charge ma galerie d'applications, j'ai utiliser la valeur par défaut d'android galerie de sélectionner une image et quand je reviens à mon onActivityResult n'est pas appelé mon activité.
Ça ressemble à ça - et j'ai mis un point d'arrêt à if(resultCode == 0)
, donc, pour l'instant, la logique de mon onActivityResult ne devrait pas d'importance
public void onActivityResult(int requestCode, int resultCode, Intent data) {
if (resultCode == 0) {
if (requestCode == 0) {
Uri selectedImageUri = data.getData();
//OI FILE Manager
filemanagerstring = selectedImageUri.getPath();
//MEDIA GALLERY
selectedImagePath = getPath(selectedImageUri);
//DEBUG PURPOSE - you can delete this if you want
if(selectedImagePath!=null)
System.out.println(selectedImagePath);
else System.out.println("selectedImagePath is null");
if(filemanagerstring!=null)
System.out.println(filemanagerstring);
else System.out.println("filemanagerstring is null");
//NOW WE HAVE OUR WANTED STRING
if(selectedImagePath!=null)
System.out.println("selectedImagePath is the right one for you!");
else
System.out.println("filemanagerstring is the right one for you!");
}
}
}
Du cycle de vie des fonctions sont souvent appelés à sortir de l'ordre et de façon intermittente pour les Activités à l'intérieur d'un tabhost/tabgroup, donc j'ai vérifié pour voir ce que le cycle de vie de fonctions SONT appelés après que la galerie de la ferme (ce qui arrive dès que je sélectionne une image dans la galerie android)
Le seul à être appelé est le onResume()
dans mon TabHost activité. J'ai donc essayé de mettre exactement la même onActivityResult()
méthode dans mon TabHost classe AINSI QUE les TabActivity classe. Avec un point d'arrêt dans le même emplacement au début de la méthode.
Aucune de ces classes sont appelées.
Je dessine un vide maintenant, comment puis-je obtenir le résultat de l'application galerie dans mon application si aucun des construit dans la réception des méthodes de se répondre à elle.
Depuis que je sais que mon principal TabHost obtient le onResume()
appelé, j'ai essayé d'ajouté Intent graphics = getIntent();
pour voir si elle allait recevoir des données à partir de la galerie de sélection, il ne le fait pas, donc je ne vois pas comment je peut faire de la logique dans le onResume() la méthode soit.
Solutions de bienvenue! 🙂
Il est, j'ai également ajouté dans la tabgroup et tabactivity pages avec des points d'arrêt pour voir si l'un d'entre eux sont appelés à tous. Ironiquement, il dit qu'il va lancer une ActivityNotFoundException si il ne s'appelle pas correctement, et cela ne fonctionne pas 🙁 il s'agit tout simplement de ne pas être appelé
Juste pour le plaisir avez-vous essayé de créer un projet de test et une simple copie de votre intention avec le onActivityResult que vous avez dans le code ci-dessus pour vous assurer qu'il fonctionne alors. Si cela ne fonctionne pas alors. Quelque chose est funky avec votre téléphone/émulateur. Si cela fonctionne, quelque chose est en train d'être négligé dans votre code ou de l'activité que vous appelez n'est pas l'appel de setResult(..) correctement
J'ai posté ma solution.
OriginalL'auteur CQM | 2011-10-18
Vous devez vous connecter pour publier un commentaire.
Essayer d'appeler le startActivityForResult utilisant le contexte de la tabgroup activité contenant votre activité en cours et d'écouter dans le tabgroup activité.
L'utiliser pour obtenir la tabGroupActivity:
Et ensuite appeler startActivityForResult:
Enfin , mettre un onActivityResult auditeur dans le tabGroupActivity:
OriginalL'auteur Valer Dragos
À en juger par le nombre de questions comme celle-ci, il y a beaucoup de raisons pour lesquelles ce que l'on appelle l'activité peut ne pas déclencher de l'appelant
onActivityResult()
méthode.Une raison que j'ai trouvé, c'est quand j'ai appelé
startActivityForResult(intent, requestCode)
, avec unrequestCode
valeur inférieure à 0. Ma demande n'a pas besoin d'unrequestCode
et l'Android de la documentation, a déclaré à l'aide de < 0 ne serait pas envoyer unrequestCode
.Mais les docs Android ne mentionne pas la conséquence d'une
requestCode
< 0. La conséquence est qu'il empêche l'appelantonActivityResult()
méthode de jamais être invoquée! Ouch!Par conséquent, même si votre application n'a pas besoin d'un
requestCode
, vous voulez toujours utiliser un avec une valeur >= 0.C'est ce que j'ai appris aujourd'hui:-)
OriginalL'auteur devdanke
La solution est d'appeler un transparent de l'activité sur le haut de l'activité principale. Cette transparence de l'activité est en face de la tabhost et sont normales du cycle de vie des fonctions.
Cette transparence de l'activité des appels à la galerie intention onCreate(), il obtient tout est rentré comme normale dans son onActivityResult et vous serez en mesure de passer les informations renvoyées dos pour le reste de l'application, tels que la normale. finish() est à l'intérieur de la méthode onActivityResult, de sorte que l'utilisateur n'a même jamais d'avis qu'un transparent de l'activité a été appelé.
Mise à jour copiés à partir des commentaires:
De l'activité d'Un des appels de l'Activité B via normale intention. Activité B n'a pas de xml et exécute onCreate comme ce
et lorsque l'Activité C est fini il appelle la onActivityResult de l'Activité B
D'accord avec @Falmarri que c'est assez "hacky". Toutefois, heureux d'entendre que vous avez trouvé un moyen d'obtenir que cela fonctionne
Un exemple de code de ce hack possible? Voudrais vraiment savoir comment cela est réalisé!
L'activité d'Un des appels de l'Activité B via normale intention. Activité B n'a pas de xml et exécute onCreate comme ce
public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); //setContentView(R.layout.dialogpopper); Intent intent = new Intent(Intent.ACTION_PICK); intent.setType("image/*"); startActivityForResult(intent, 0); }//end onCreate
et lorsque l'Activité C est fini il appelle la onActivityResult de l'Activité BOriginalL'auteur CQM
Vous avez juste à supprimer
android:noHistory="true"
ce formulaire votre fichier manifest.OriginalL'auteur Hardik Lakhani
Utiliser les valeurs constantes pour les codes de Résultat:
Activité.RESULT_OK et
De l'activité.RESULT_CANCELED
Vous verrez que la valeur d'annulation est en fait 0. Donc, dans votre code vous de vérifier pour voir si l'activité a été annulée.
modifier votre code pour
En outre de changer votre Intention d'action:
Si vous faites cela, vous pouvez simplement appeler
au lieu de créer le sélecteur. Il va chercher automatiquement les activités associées à cette intention et le type mime et de les afficher pour vous
OriginalL'auteur dymmeh
La façon onActivityResult dépend de la launchMode de votre Activité (dans le manifeste). Je ne suis pas sûr si cela peut être un problème ici.
OriginalL'auteur Christine
avez-vous @Override au-dessus de votre onActivityRestult?
(en regardant de l'ancien code qui ne présente donc pas bien pourquoi sa nécessaire) appel super.onactivityresult(requestcode, resultscode, données) que le premier appel à la méthode
aussi mes intentions n'ont pas d'autres trucs en eux
startActivityForResult(Intent.createChooser(but,
"Sélectionner Une Image"), 0);
je pense qu'
startActivityForResult(source.class, destination.class);
bien sûr, la source et la destination doit être le nom de l'classes
aussi essayer ce qui est expliqué ci-dessous par Dymmeh?
concernant les intentions, je suis de l'ouverture de la galerie intégrée, cela exige l'application android qui est en dehors de mon application. Je ne peux pas faire source.class, destination.class si c'est en dehors de mon application. De toute façon, je vais avoir pas de chance. Mes activités ne sont toujours pas appelé. en utilisant à la fois Dymmeh de codes de résultat et votre
super
suggestionvérifier mes mises à jour sur la réponse de l'Intention à l'action. Je "pense" c'est ce que vous avez besoin.
pas sûr de ce que tu veux dire à propos "de l'application android, qui est en dehors de mon application", de ce qu'il semble que le projet que vous essayez de faire est très similaire à celui que j'ai fait dans le passé. mauvais modifier ma réponse avec un peu de code et voir si cela aide.
OriginalL'auteur owen gerig