RESULT_OK 的 startActivityForResult 和 setResult 不起作用
startActivityForResult and setResult with RESULT_OK does not work
我不确定这是否是预期的行为,但如果我在 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();
使用上面的代码并在 OneActivity
中覆盖 onActivityResult
之后没有任何反应。 onActivityResult
似乎甚至没有被调用。但是,如果我将 RESULT_OK
更改为 0
,它会起作用。
这是预期的吗?还有其他人经历过吗?
查看 startActivityForResult 方法的文档定义。它说:
requestCode int: If >= 0, this code will be returned in onActivityResult() when the activity exits.
所以你的请求码应该>=0。如果你检查RESULT_OK响应码的值,它是-1。请务必注意,请求代码与结果代码不同。请求码用于识别结果所针对的请求,结果码告诉你请求是否成功。
您混淆了两个不同的概念:
requestCode
(startActivityForResult
的第二个参数)是您分配的唯一 ID,可以是任何正整数。
resultCode
(setResult
的第一个参数)必须是 Activity class 中的常量之一,如 setResult documentation
您会注意到您的 onActivityResult
收到了您传递给 startActivityForResult
的 requestCode
和 的 resultCode
您已在 setResult
中设置 - 确保您比较的是 onActivityResult
中的正确数字
请使用此示例检查您的代码:
主要活动:
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
}
});
}
我不确定这是否是预期的行为,但如果我在 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();
使用上面的代码并在 OneActivity
中覆盖 onActivityResult
之后没有任何反应。 onActivityResult
似乎甚至没有被调用。但是,如果我将 RESULT_OK
更改为 0
,它会起作用。
这是预期的吗?还有其他人经历过吗?
查看 startActivityForResult 方法的文档定义。它说:
requestCode int: If >= 0, this code will be returned in onActivityResult() when the activity exits.
所以你的请求码应该>=0。如果你检查RESULT_OK响应码的值,它是-1。请务必注意,请求代码与结果代码不同。请求码用于识别结果所针对的请求,结果码告诉你请求是否成功。
您混淆了两个不同的概念:
requestCode
(startActivityForResult
的第二个参数)是您分配的唯一 ID,可以是任何正整数。resultCode
(setResult
的第一个参数)必须是 Activity class 中的常量之一,如 setResult documentation
您会注意到您的 onActivityResult
收到了您传递给 startActivityForResult
的 requestCode
和 的 resultCode
您已在 setResult
中设置 - 确保您比较的是 onActivityResult
请使用此示例检查您的代码:
主要活动:
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
}
});
}