2011-11-16 5 views
0

J'essaie d'obtenir le resultCode à OK dans ma fonction onActivityResult. Cependant, ça revient toujours à 0. J'ai passé plusieurs jours là-dessus, et je n'arrive pas à comprendre pourquoi ça ne marche pas. Voici mon code. Si quelqu'un peut m'aider, je serai très reconnaissant, Merci.resultCode est toujours 0

Ma classe Activité1:

private class MyTask extends AsyncTask<String, Void, String> { 
     @Override 
     protected String doInBackground(String... urls) { 
       // process 
      return result; 
     } 

     @Override 
     protected void onPostExecute(String result) { 
      Intent i = new Intent(Activity1.this, Activity2.class); 
      i.putExtra("Value1", "This value one for ActivityOne "); 
      i.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK); 
      startActivityForResult(i, REQUEST_CODE); 
      textView.setText(result); 
     } 
    } 
    @Override 
    protected void onActivityResult(int requestCode, int resultCode, Intent data) { 
     if (resultCode == RESULT_OK && requestCode == REQUEST_CODE) { 
         // do something 
       } 
     } 

Mon activité 2 Classe:

@Override 
    public void finish() { 
     Intent data = new Intent(); 
     data.putExtra("returnKey1", "return 1"); 
     setResult(RESULT_OK, data); 
     super.finish(); 
    } 

Mon manifeste:

<application android:icon="@drawable/icon" android:label="@string/app_name"> 
     <activity android:name=".Activity1" 
        android:label="@string/app_name"> 
      <intent-filter> 
       <action android:name="android.intent.action.MAIN" /> 
       <category android:name="android.intent.category.LAUNCHER" /> 
      </intent-filter> 
     </activity> 
     <activity android:name=".Activity2" 
        android:label="@string/app_dialog_name" 
        android:launchMode="singleTop" 
        android:excludeFromRecents="true" 
       android:taskAffinity="" 
      android:theme="@android:style/Theme.Dialog"> 
     </activity> 
    </application> 
+0

Où et comment la variable RESULT_OK est déclarée? – NOSTRA

+0

@NOSTRA: RESULT_OK est une constante publique statique déclarée dans Activity. – c05mic

+0

En outre, lorsque j'essaie de le déboguer, j'ai remarqué que onActivityResult est appelé immédiatement avant que MyActivity2 ne démarre. –

Répondre

1

finish() est en fait pas un des callbacks vous obtenez comme partie du cycle de vie de l'activité. Pouvez-vous confirmer que vous appelez finish() vous-même dans MyActivity2?

Si vous n'appelez pas finish() par vous-même, vous devez appeler setResult(), dans le onDestroy() de MyActivity2.

Espérons que cela aide!

+0

Exactement, «terminer» est une méthode pour vous d'appeler. Ce n'est pas une méthode appelée par Android. – Brigham

+0

Oui, voici comment j'appelle ma finition: \t public void onClick (Voir la vue) { \t \t finish(); \t} –

+0

Essayez de définir setResult() dans onDestroy, car il s'agit du dernier rappel que vous obtenez lorsque l'activité se termine. – c05mic

-1

Si vous appelez finish() pour votre activité, il sera toujours 0 à la suite (http://developer.android.com/reference/android/app/Activity.html#finish())

Il existe une autre méthode: finishActivity (int requestCode). Mais si vous voulez mettre Extras dans le résultat, nous avons besoin d'un autre moyen. Alors pourquoi substituez-vous la méthode finish()? D'où appelez-vous cette méthode?

+0

Quand j'essaie de ne pas l'ignorer, il ne fonctionne toujours pas. J'appelle la finition() sur ma méthode onclick. Merci beaucoup pour votre aide –

+1

I pense que: ** i.addFlags (Intent.FLAG_ACTIVITY_NEW_TASK); ** est votre problème. Supprimez-le et vous serez heureux :) Pourquoi avez-vous besoin de ce drapeau? – NOSTRA

+0

J'ai besoin de ce drapeau car j'en ai besoin pour alerter l'utilisateur quand il se trouve dans une autre application. Merci pour votre réponse :). J'apprécie vraiment cela. –

2
i.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK); 

est le problème. Selon docs:

This flag can not be used when the caller is requesting a result from the activity being launched.