2010-12-07 67 views
5

在測試期間,我注意到有時我的子活動的finish()不會執行onActivityResult。大多數時候它工作正常,我無法弄清楚,何時以及爲什麼會出現這個問題。onActivityResult有時在子活動結束時不會調用

子活動開始:

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); 

} 

子活動光潔度:

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(由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

你可以發佈您的onActivityResult()的實現? – 2010-12-08 00:15:47

+0

你什麼時候調用`select()`? – CommonsWare 2010-12-08 01:04:13

回答

-2

問題是 「的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); 
} 
相關問題