Android setResult与ActivityResult不匹配
我正在开发一个包含两个活动的测验应用程序:一个是显示问题列表的Android setResult与ActivityResult不匹配,android,android-intent,Android,Android Intent,我正在开发一个包含两个活动的测验应用程序:一个是显示问题列表的QuizActivity,另一个是显示问题细节(提示、选项等)的QuestionActivity。在QuizActivity中,我使用startActivityForResult(Intent,int)方法打开QuestionActivity,如下所示: Intent questionIntent = new Intent(QuizActivity.this, QuestionActivity.class); questionInte
QuizActivity
,另一个是显示问题细节(提示、选项等)的QuestionActivity
。在QuizActivity
中,我使用startActivityForResult(Intent,int)
方法打开QuestionActivity
,如下所示:
Intent questionIntent = new Intent(QuizActivity.this, QuestionActivity.class);
questionIntent.putExtra("currentQuestion", currentQuestion);
startActivityForResult(questionIntent, REQUEST_CODE_SELECTED_OPTION);
其中,REQUEST\u code\u SELECTED\u选项
是一个常量,设置为1
在QuestionActivity
完成后,它应该返回所选选项的索引(假设它是一个多选问题),因此我覆盖了onPause()
回调:
@Override
public void onPause() {
super.onPause();
Intent returnIntent = new Intent(QuestionActivity.this, QuizActivity.class);
if (curQuestion.selected()) {
returnIntent.putExtra("Result Code", RESULT_OK);
setResult(Activity.RESULT_OK, returnIntent);
Log.d("QuestionActivity", "Returned with " + Activity.RESULT_OK);
} else {
returnIntent.putExtra("Result Code", RESULT_CANCELED);
setResult(Activity.RESULT_CANCELED, returnIntent);
Log.d("QuestionActivity", "Returned with " + Activity.RESULT_CANCELED);
}
}
我还在我的QuizActivity
中实现了onActivityResult(int,int,Intent)
回调:
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
Log.d("QuizActivity", "Received result code: " + resultCode);
Log.d("QuizActivity", "Result code from intent: " + data.getIntExtra("Result Code", 100));
if (requestCode == REQUEST_CODE_SELECTED_OPTION) {
if(resultCode == Activity.RESULT_OK){
Log.d("QuizActivity", "Got RESULT_OK");
}
if (resultCode == Activity.RESULT_CANCELED) {
// do nothing
}
}
}
但是,当我运行应用程序时,输入QuestionActivity
,选择一个选项,回击,从日志中我看到在QuestionActivity
中,结果代码正确设置为-1:
D/QuestionActivity: Returned with -1
D/QuizActivity: Received result code: 0
但是在onActivityResult(int,int,Intent)方法中,结果代码是0。此外,我还尝试将
int
放在要传回的意图中,但在QuizActivity
中,收到的意图是null
。我真的很困惑。我使用的方法错了吗?我发现了。根据这一点和Android文档,必须在活动完成之前调用setResult(int,Intent)
方法(即在调用onPause()
、onStop()
或onDestroy
之前)。我尝试将其放入onBackPressed()中
但最初不起作用,因为我在第一行调用了super.onBackPressed()
。最后,这起作用:
@Override
public void onBackPressed() {
Intent returnIntent = new Intent(QuestionActivity.this, QuizActivity.class);
if (curQuestion.selected()) {
returnIntent.putExtra("Result Code", RESULT_OK);
setResult(Activity.RESULT_OK, returnIntent);
Log.d("QuestionActivity", "Returned with " + Activity.RESULT_OK);
} else {
returnIntent.putExtra("Result Code", RESULT_CANCELED);
setResult(Activity.RESULT_CANCELED, returnIntent);
Log.d("QuestionActivity", "Returned with " + Activity.RESULT_CANCELED);
}
super.onBackPressed();
}
在调用setResult()之前,您没有在Intent中设置数据,为什么需要在onPause而不是onBackPressed()中执行此操作?确保您是从活动本身调用
startActivityForResult
,而不是从片段调用。因为如果您是从片段执行startActivityForResult
,则将为片段调用onActivityResult
。有关详细信息,请参阅。@AjayShrestha我还尝试在onBackPressed()中设置它但它也不起作用。@azizbekian我是从活动本身打电话来的