我不确定这是否是预期的行为,但如果我在OneActivity
执行以下操作以启动TwoActivity
:
Intent intent = new Intent(this, TwoActivity.class);
startActivityForResult(intent, RESULT_OK);
当我回到TwoActivity
时,OneActivity
:
Intent resultIntent = new Intent();
resultIntent.putExtra(SOURCE, TAG);
setResult(RESULT_OK, resultIntent);
finish();
使用上面的代码并在onActivityResult
中覆盖OneActivity
之后没有任何反应。 onActivityResult
似乎甚至没有被调用。但是,如果我将RESULT_OK
更改为0
,则会有效。
这是预期的吗?还有其他人经历过吗?
答案 0 :(得分:7)
查看startActivityForResult方法的文档定义。它说:
requestCode int:如果> = 0,当活动退出时,将在onActivityResult()中返回此代码。
因此,您的请求代码应为> = 0.如果您检查RESULT_OK响应代码的值,则为-1。请注意,请求代码与结果代码不同,这一点很重要。请求代码用于标识结果所针对的请求,结果代码告诉您请求是否成功。
答案 1 :(得分:2)
你混淆了两个不同的概念:
requestCode
(startActivityForResult
的第二个参数)是您指定的唯一ID,可以是任何正整数。resultCode
(setResult
的第一个参数)必须是Activity类中的一个常量,如setResult documentation 您会注意到,onActivityResult
收到了requestCode
传入startActivityForResult
和您设置的resultCode
的{{1}} setResult
- 确保您正在比较onActivityResult
答案 2 :(得分:0)
请使用此示例检查您的代码:
MainActivity:
public class MainActivity extends Activity {
TextView textView1;
Button button1;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
textView1=(TextView)findViewById(R.id.textView1);
button1=(Button)findViewById(R.id.button1);
button1.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View arg0) {
Intent intent=new Intent(MainActivity.this,SecondActivity.class);
startActivityForResult(intent, 2);// Activity is started with requestCode 2
}
});
}
// Call Back method to get the Message form other Activity
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data)
{
super.onActivityResult(requestCode, resultCode, data);
// check if the request code is same as what is passed here it is 2
if(requestCode==2)
{
String message=data.getStringExtra("MESSAGE");
textView1.setText(message);
}
}
}
然后是SecondActivity:
public class SecondActivity extends Activity {
EditText editText1;
Button button1;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_second);
editText1=(EditText)findViewById(R.id.editText1);
button1=(Button)findViewById(R.id.button1);
button1.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View arg0) {
String message=editText1.getText().toString();
Intent intent=new Intent();
intent.putExtra("MESSAGE",message);
setResult(2,intent);
finish();//finishing activity
}
});
}