【问题标题】:onActivityResult called before setResultonActivityResult 在 setResult 之前调用
【发布时间】:2016-11-03 14:27:13
【问题描述】:

我有一个程序,其中使用正确的请求代码调用 onActivityResult(),并且意图参数为空,并且,当该活动调用 setResult() 时,不会调用 onactivityresult。 onActivityResult() 在 startActivityForResult() 之后调用

public void placeListActivity(View view) {

    Intent placeListIntent = new Intent(this,
            PlaceListActivity.class);
    // startActivity(placeListIntent);
    this.startActivityForResult(placeListIntent, 5);
}

protected void onActivityResult(int request, int result, Intent arg2) {
    super.onActivityResult(request, result, arg2);


  if (request == 5 && result == Activity.RESULT_OK) {
        handleOnActivityResult();
    }

第二个活动:

@Override
public void onBackPressed() {

    if(status){
        setResult(Activity.RESULT_OK);
        finish();
    }else{
        super.onBackPressed();
    }




}

【问题讨论】:

  • 请查看example。你做错了什么,仍然卡住然后发布你的代码并解释更多,Android onActivityResult() 被正确调用,没有任何错误。
  • 这个问题只针对低于 api 级别 17
  • 发布代码。你的解释很难理解。解释正在发生的事情以及您认为应该发生的事情。

标签: android android-activity startactivityforresult


【解决方案1】:
setResult(Activity.RESULT_OK);

您只发送 resultCode,因此 Intent 将收到 null。在 setResult 方法中使用 resultCode 作为第二个参数发送 Intent。您将在第一个活动中获得该意图。



注意:-当activity的启动模式为singleTask或singleTop时,一旦activity启动,数据为null就会调用onActivityResult。为防止这种情况,请使用 Intent.setFlags(0) 重置默认标志。

【讨论】:

  • 我的问题是在setResult之前调用了onActivityResult
  • 此问题仅适用于某些 api 级别。当我将活动启动模式从 singleTask 更改为 singleTop 时效果很好。这是正确的方式吗?
  • 而不是finish()super.onBackPressed();
  • 使您的活动启动模式标准并使用此代码
    @Override public void onBackPressed() { Intent intent = new Intent(); intent.putExtra("key","value"); if(status){ setResult(Activity.RESULT_OK,intent); super.onBackPressed(); }else{ super.onBackPressed(); } }
  • 什么不起作用,活动没有被破坏或者你没有在 onActivityResult 中得到正确的意图?
猜你喜欢
  • 1970-01-01
  • 2012-07-15
  • 2018-11-01
  • 1970-01-01
  • 2011-05-14
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多