2016-07-07 2 views
0

Cette question a été soulevée sur plusieurs threads mais leurs solutions ne fonctionnent pas pour moi.Android onActivityResult n'est pas appelé

Ceci est mon fichier manifeste

<?xml version="1.0" encoding="utf-8"?> 
<manifest xmlns:android="http://schemas.android.com/apk/res/android" 
     package="com.example.intent" 
     android:versionCode="1" 
     android:versionName="1.0"> 
<uses-sdk android:minSdkVersion="8" 
      android:targetSdkVersion="23"/> 
<application android:icon="@drawable/icon" 
      android:label="@string/app_name" 
      android:allowBackup="false"> 
    <activity android:name=".Start"> 
     <intent-filter> 
      <action android:name="android.intent.action.MAIN"/> 
      <category android:name="android.intent.category.LAUNCHER"/> 
     </intent-filter> 
    </activity> 
    <activity android:name=".Second"/> 
</application> 
</manifest> 

Cette mon lancement de classe

package com.example.intent; 
import android.app.Activity; 
import android.content.Intent; 
import android.os.Bundle; 
import android.widget.Toast; 

public class Start extends Activity { 

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    Toast.makeText(this, "First Intent", Toast.LENGTH_LONG).show(); 
    Intent intent = new Intent(this, Second.class); 
    startActivityForResult(intent, RESULT_OK); 
} 

@Override 
protected void onActivityResult(int requestCode, int resultCode, Intent data) { 
    super.onActivityResult(requestCode, resultCode, data); 
    Toast.makeText(this, "After Intent", Toast.LENGTH_LONG).show(); 
} 
} 

Ceci est mon deuxième classe

package com.example.intent; 
import android.app.Activity; 
import android.os.Bundle; 
import android.widget.Toast; 

public class Second extends Activity { 

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    Toast.makeText(this, "Second Intent", Toast.LENGTH_LONG).show(); 
} 
} 

maintenant selon le code, la fonction onActivityResult dans Démarrer classe doit être appelée lorsque j'appuie sur le bouton de retour sur la classe de seconde activité, mais ce n'est pas c alled depuis que je suis incapable de voir un Toast indiquant Après l'intention.

Veuillez me rectifier et fournir une solution pour cela. Merci.

+0

essayez de mettre SetResult (RESULT_OK); dans votre deuxième activité –

Répondre

1

remplacez RESULT_OK dans startActivityForResult (intention, RESULT_OK); avec une constante personnalisée, un nombre positif. RESULT_OK est -1

+0

Merci. Cette solution fonctionne pour moi. Il n'a même pas besoin d'avoir un setResult en seconde classe. Bien que si vous pouvez expliquer pourquoi RESULT_OK ne fonctionne pas bien qu'il semble s'insérer dans la chaîne logique. Merci encore une fois –

+0

son ne fonctionne pas parce que c'est un nombre négatif, ce qui apparemment n'est pas accepté :) Quoi qu'il en soit une constante mal utilisée, comme dans onActivityResult vous compareriez à la fois requestCode et resultCode à RESULT_OK qui serait assez confus – tibbi

0

La méthode onActivityResult n'est pas appelée car vous devez définir le code de retour dans votre deuxième classe.

Le Official Documentation dit:

Lorsqu'un fin de l'activité, il peut appeler setResult (int) pour renvoyer des données de retour à son parent. Il doit toujours fournir un code de résultat, qui peut correspondre aux résultats standard RESULT_CANCELED, RESULT_OK ou à toute valeur personnalisée à partir de RESULT_FIRST_USER.

Pour définir un code de résultat, utilisez la méthode setResult avant la fermeture de l'activité.

Ajoutez la ligne suivante à votre deuxième classe:

setResult(RESULT_OK) 

Par exemple, vous pouvez remplacer la méthode onBackPressed et y mettre setResult, comme ceci:

@Override 
public void onBackPressed() 
{ 
    setResult(RESULT_OK) 
    super.onBackPressed(); 
} 
+0

Cette solution est ne travaille pas pour moi. Bien que la solution @tibbi fonctionne pour moi, sans définir setResult en deuxième classe. Merci de votre considération pour ce problème. –