Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/188.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/excel/24.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java Android-在活动关闭时设置活动结果_Java_Android_Onactivityresult_Onpause_Onbackpressed - Fatal编程技术网

Java Android-在活动关闭时设置活动结果

Java Android-在活动关闭时设置活动结果,java,android,onactivityresult,onpause,onbackpressed,Java,Android,Onactivityresult,Onpause,Onbackpressed,要为结果启动活动,请执行以下操作: Intent intent = new Intent(MainActivity.this, DetailsActivity.class); startActivityForResult(intent,EVENT_DETAILS_REQUEST); 在my Details活动中,设置可用于主要活动的结果和附加: @Override public void onBackPressed() { Intent resultIntent

要为结果启动活动,请执行以下操作:

Intent intent = new Intent(MainActivity.this, DetailsActivity.class);
startActivityForResult(intent,EVENT_DETAILS_REQUEST);
在my Details活动中,设置可用于主要活动的结果和附加:

@Override
    public void onBackPressed()
    {
        Intent resultIntent = new Intent();
        resultIntent.putExtra("isEdited",isEdited);
        setResult(RESULT_OK,resultIntent);
        finish();
    }
最后,在主要活动中:

@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
数据将为空

我曾尝试使用
onPause
onStop
onFinish
而不是
onBackPressed
来管理它的工作,但我得到的
数据
onActivityResult
总是空的

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

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

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

在详细信息活动中重写此方法。。。这段代码将其添加到您的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);
    }

当硬件被反压时,会自动调用此命令

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

             //your code here   

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

您可以这样做,以便在所有可能的关闭案例中发送结果:

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

在menifest文件中使用android:launchMode=“singleTop”。它已经存在。请粘贴您的onoptionItemSelected代码。它不存在。我是否应该在选项ItemSelected中单击返回箭头?要检查什么id?请参阅下面Manoj的答案。完美答案,谢谢。我不知道在何处捕捉活动返回箭头按钮事件。