【问题标题】:startActivityForResult and setResult with RESULT_OK does not work带有 RESULT_OK 的 startActivityForResult 和 setResult 不起作用
【发布时间】:2017-01-04 23:57:44
【问题描述】:

我不确定这是否是预期行为,但如果我在 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,它会起作用。

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

【问题讨论】:

    标签: android android-activity onactivityresult


    【解决方案1】:

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

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

    所以您的请求代码应该 >= 0。如果您检查 RESULT_OK 响应代码的值,它是 -1。请务必注意,请求代码与结果代码不同。请求代码用于识别结果的请求,结果代码告诉您请求是否成功。

    【讨论】:

    • 呃,我犯了一个多么愚蠢的错误!这就说得通了。谢谢。
    • @tvalent2 没问题,很高兴为您提供帮助 =)。
    【解决方案2】:

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

    • requestCodestartActivityForResult 的第二个参数)是您分配的唯一 ID,可以是任何正整数。
    • resultCodesetResult 的第一个参数)必须是 Activity 类中的常量之一,如 setResult documentation 中所示

    你会注意到你的onActivityResult 接收到你传递给startActivityForResultrequestCode 和你在setResult 中设置的resultCode - 确保你是比较 onActivityResult 中的正确数字

    【讨论】:

    • 哇,真是个错误。谢谢!
    【解决方案3】:

    请使用此示例检查您的代码:

    主活动:

    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  
                    }  
                });  
        }  
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-03-02
      • 1970-01-01
      • 2016-06-15
      • 2012-05-22
      • 1970-01-01
      相关资源
      最近更新 更多