带有RESULT_OK的startActivityForResult和setResult不起作用

时间:2016-08-29 03:14:57

标签: android android-activity onactivityresult

我不确定这是否是预期的行为,但如果我在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,则会有效。

这是预期的吗?还有其他人经历过吗?

3 个答案:

答案 0 :(得分:7)

查看startActivityForResult方法的文档定义。它说:

  

requestCode int:如果> = 0,当活动退出时,将在onActivityResult()中返回此代码。

因此,您的请求代码应为> = 0.如果您检查RESULT_OK响应代码的值,则为-1。请注意,请求代码与结果代码不同,这一点很重要。请求代码用于标识结果所针对的请求,结果代码告诉您请求是否成功。

答案 1 :(得分:2)

你混淆了两个不同的概念:

  • requestCodestartActivityForResult的第二个参数)是您指定的唯一ID,可以是任何正整数。
  • resultCodesetResult的第一个参数)必须是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  
                }  
            });  
    }