【问题标题】:onActivityResult sometimes not called when Sub-Activity finishes子活动完成时有时不会调用 onActivityResult
【发布时间】:2010-12-07 23:51:46
【问题描述】:

在测试过程中,我注意到有时我的子活动的 finish() 不会执行 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);
    }

}

【问题讨论】:

  • 你能发布你的 onActivityResult() 实现吗?
  • 你什么时候打电话给select()
  • select() 在子活动中单击按钮时被调用。我用调试器检查并确定 select() 总是被执行,而第一次登录 onActivityResult 并不总是显示。

标签: android subactivity


【解决方案1】:

也许您有一些开发人员选项,例如终止活动标志或限制后台进程。

转到设置-> 未选中开发者选项Don't keep activitiesBackground process limit 设置为标准限制。

更多信息请查看https://stackoverflow.com/a/14195833/779408https://stackoverflow.com/a/11522468/779408

【讨论】:

    【解决方案2】:

    问题是“correlationId”

    /** 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);
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-04-18
      • 2012-12-15
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多