2010-12-07 27 views
5

Durante la prueba noté que a veces el final() de mi subactividad no se ejecuta en ActivityResult. La mayoría de las veces funciona bien, y no puedo entender cuándo y por qué ocurre este problema.onActivityResult a veces no se llama cuando Sub-Activity termina

subactividad Comienzo:

public void launchSubActivity(Class<? extends Activity> subActivityClass, Bundle data, 
     OnSubActivityResult callback) { 

    Intent i = new Intent(this, subActivityClass); 
    if(data!=null) i.putExtras(data); 

    Random rand = new Random(); 
    int correlationId = rand.nextInt(); 

    _callbackMap.put(correlationId, callback); 

    startActivityForResult(i, correlationId); 

} 

Subactividad:

public void select() { 
    Bundle b = new Bundle(); 
    b.putInt("YEAR", year_result); 
    b.putInt("MONTH", month_result); 
    b.putInt("DAY", day_result); 
    this.getIntent().putExtras(b); 
    this.setResult(RESULT_OK, this.getIntent()); 
    this.finish(); 
} 

onActivityResult (por Nazmul Idris):

/** 
* this is the underlying implementation of the onActivityResult method that 
* handles auto generation of correlationIds and adding/removing callback 
* functors to handle the result 
*/ 
@Override 
protected void onActivityResult(int correlationId, int resultCode, 
     Intent data) { 

    Log.d(Prototype.TAG, "SimpleActivity Result "+resultCode); 

    try { 
     OnSubActivityResult callback = _callbackMap.get(correlationId); 

     switch (resultCode) { 
     case Activity.RESULT_CANCELED: 
      callback.onResultCancel(data); 
      _callbackMap.remove(correlationId); 
      break; 
     case Activity.RESULT_OK: 
      callback.onResultOkay(data); 
      _callbackMap.remove(correlationId); 
      break; 
     default: 
      Log.e(Prototype.TAG, 
        "Couldn't find callback handler for correlationId"); 
     } 
    } catch (Exception e) { 
     Log 
       .e(Prototype.TAG, 
         "Problem processing result from sub-activity", e); 
    } 

} 
+0

Podría publicar su onActivityResult aplicación()? –

+0

¿Cuándo llamas 'select()'? – CommonsWare

+0

select() se invoca al hacer clic con el botón en la subactividad. Comprobé con el depurador y estoy seguro de que select() siempre se ejecuta, mientras que el primer Log in on ActivityResult no siempre se muestra. – Daniel

Respuesta

-2

problema es "correlationId" < 0:

/** use this method to launch the sub-Activity, and provide a functor to handle the result - ok or cancel */ 
public void launchSubActivity(Class subActivityClass, ResultCallbackIF callback) { 

    Intent i = new Intent(this, subActivityClass); 
    Random rand = new Random(); 
    int correlationId = rand.nextInt(); 

/* 
Values os correlationId: 

1972479154 

477929567 

-1246508909 = NEGATIVE = INVALID! 

*/ 

    if (correlationId < 0) 
     correlationId *= -1; 

    _callbackMap.put(correlationId, callback); 
    startSubActivity(i, correlationId); 
} 
+2

¿Podría uno de los downvoters por favor dejar un comentario? –

Cuestiones relacionadas