Android - 在活动结束时设置活动结果

时间:2017-08-16 11:55:15

标签: java android onactivityresult onpause onbackpressed

开始结果活动:

Intent intent = new Intent(MainActivity.this, DetailsActivity.class);
startActivityForResult(intent,EVENT_DETAILS_REQUEST);

在我的DetailsActivity中,设置结果和附加内容,可以在主要活动中使用:

@Override
    public void onBackPressed()
    {
        Intent resultIntent = new Intent();
        resultIntent.putExtra("isEdited",isEdited);
        setResult(RESULT_OK,resultIntent);
        finish();
    }

最后,在MainActivity中:

@Override
    protected void onActivityResult(int requestCode, int resultCode, @NonNull Intent data)
{
  switch(requestCode)
  {
    ......
    case EVENT_DETAILS_REQUEST:
    boolean isEdited = data.getBooleanExtra("isEdited", false);
    .......
    break;

  }

}

只要用户使用“后退”硬件(或系统导航栏)按钮关闭DetailsActivity就可以了。如果用户点按活动顶部的“返回”箭头以关闭活动,则系统不会调用onBackPressed,并且onActivityResult数据将为空。

我尝试使用onPauseonStoponFinish代替onBackPressed来管理它的工作,但我data为{{{} 1}}总是为空。

解决问题的正确方法是什么?

4 个答案:

答案 0 :(得分:3)

@Override
public boolean onOptionsItemSelected(MenuItem item)
{
    switch (item.getItemId())
    {
        case android.R.id.home:
            onBackPressed();
            return true;

        default:
            return super.onOptionsItemSelected(item);
    }
}

在详细活动中覆盖此方法...以及此代码

答案 1 :(得分:1)

在DetailsActivity中添加此内容

@Override
    public boolean onOptionsItemSelected(MenuItem item) {
        int id = item.getItemId();
        if (id == android.R.id.home) {
       Intent resultIntent = new Intent();
        resultIntent.putExtra("isEdited",isEdited);
        setResult(RESULT_OK,resultIntent);
            finish();
        }
        return super.onOptionsItemSelected(item);
    }

答案 2 :(得分:1)

您可以执行此操作以在所有可能的近距离情况下发送结果:

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

答案 3 :(得分:0)

当硬件反向压缩时自动调用..

public boolean onKeyDown(int keyCode, KeyEvent event) {
        if (keyCode == KeyEvent.KEYCODE_BACK) {

             //your code here   

            return true;
        }
        return super.onKeyDown(keyCode, event);
    }