为什么startActivityForResult()方法在这种情况下不起作用

时间:2014-11-02 06:46:10

标签: java android

我尝试从第二个活动中获取数据,因此我使用startActivity方法来实现此目标。

    final EditText editText=(EditText)findViewById(R.id.edit);
    final String text=editText.getText().toString();
    button.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View view) {
            Intent intent=new Intent();
            intent.setData(Uri.parse(text);
            setResult(RESULT_OK,intent);
            finish();
        }
    });

让我感到困惑的是,当我把“text”放在Uri.parse()中时,它不起作用,所以我改为Uri.parse(editText.getText()。toString),它只是起作用。

那么他们之间究竟有什么区别?

2 个答案:

答案 0 :(得分:1)

因为它会有不同的价值:

您将此代码置于外的onClick

final String text=editText.getText().toString();

因此,Uri.parse(text)会在onClick发生之前返回文字。

但是如果您使用Uri.parse(editText.getText().toString),它会在onClick调用(实时)时解析文本。

答案 1 :(得分:0)

既然你这样做了:

final String text=editText.getText().toString();

final关键字“冻结”文本的值(可能是一个空字符串,因为它看起来像是在init函数中)。因此,只要您在text内使用onClick(),就会引用text的冻结值。如果您希望在单击按钮时显示当前值editText,则需要获取onClick()内的值:

intent.setData(Uri.parse(editText.getText().toString()));

请注意,您需要final的{​​{1}}关键字,否则您将无法在editText内使用它。