onBackPressed 可以设置和 return 意图结果吗?

Can onBackPressed set and return an intent result?

My MainActivity 可以调用两个不同的活动 (a & b)。 Activity A调用如下:

   private View.OnLongClickListener alc = new View.OnLongClickListener(){
    public boolean onLongClick(View v) {
        Intent j = new Intent(MainActivity.this,AActivity.class);
        startActivityForResult(j, 1);
        return true;
    }
};

A activity 有两个按钮,一个用于保存,一个用于取消。保存 return 结果...

    public void onClick(View v) {
    switch(v.getId()){
        case R.id.btnSave:
            Intent returnIntent = new Intent();
            setResult(RESULT_OK,returnIntent);
            finish();
            break;
        case R.id.btnCxl:
            finish();
            break;
    }
}

这非常有效!!

我想要 Activity B 的类似 return。我修改了它的 Intent 调用如下...

private View.OnClickListener ac = new View.OnClickListener() {
    public void onClick(View v) {
        Intent j = new Intent(MainActivity.this,BActivity.class);
        startActivityForResult(j, 1);
    }
};

在 B activity 中,我没有 "catch" 的保存按钮。浏览后,我看到 onBackPressed() 可用,因为这就是我通常离开此 activity 的方式。我读到我应该能够将结果代码放在网上的其他地方..

public void onBackPressed() {
    super.onBackPressed();
    Intent returnIntent = new Intent();
    setResult(RESULT_OK, returnIntent);
    }

在我的 onActivityResult 中插入一些 Log.i 调用 Activity...

protected void onActivityResult(int requestCode, int resultCode, Intent data) {
    Log.i("MYLOG","In Result");
    if (requestCode==1) {
        Log.i("MYLOG","In Result 1");
        if (resultCode == RESULT_OK) {
            Log.i("MYLOG","In Result 1 OK");
            // Do some data processing and display here!!
        }
    }
}

如前所述,A activity 工作正常...命中所有三个 Log.i 语句。 B activity 命中前两个,但从未命中第 3 个。

我在这里错过了什么?

谢谢皮特

您需要在 onbackpress

中添加完成
     super.onBackPressed();
    Intent returnIntent = new Intent();
    setResult(RESULT_OK, returnIntent);
finish();

就我而言,这是工作:

  • MyActivity 覆盖 onOptionsItemSelected 无效,不要使用 finish();在家里, 改为以下代码:

    @Override public 布尔 onOptionsItemSelected(菜单项){ 开关(item.getItemId()) { 案例android.R.id.home: onBackPressed(); return 正确;
    default:break; } return super.onOptionsItemSelected(项目); }

然后,你重写 onBackPressed:

   @Override
public void onBackPressed() {
    //super.onBackPressed();//
    Intent intent_return = getIntent();
    intent_return.putExtra("idPaid",p.getId());
    intent_return.putExtra("position", rootPosition);
    intent_return.putExtra("isEdit", isEdit);
    setResult(RESULT_OK, intent_return);
    finish();
}

现在,意图数据将 return 在 YourFragment 的 onActivityResult 中。 希望对你有帮助!