为什么在这种情况下startActivityForResult()方法不起作用
问题描述:
我试图从第二个活动中获取数据,因此我使用startActivity方法来实现此目标。为什么在这种情况下startActivityForResult()方法不起作用
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();
}
});
什么让我困惑的是当我把 “文” Uri.parse(),这是行不通的,所以我改变Uri.parse(editText.getText()。的toString),它只是作品。
那么他们之间究竟有什么不同呢?
答
既然你这样做:
final String text=editText.getText().toString();
的final
关键字“冻结”的文本值(以可能是一个空字符串,因为它看起来你是在初始化函数)。因此,无论何时在onClick()
内使用text
,它都会引用冻结值text
。如果你想的editText
在该按钮被点击时的电流值,你需要获取内部onClick()
值:
intent.setData(Uri.parse(editText.getText().toString()));
请注意,你需要为editText
的final
关键字,否则你将无法在onClick()
之内使用它。
答
,因为这将有不同的价值:
你把这个代码外的onClick
:
final String text=editText.getText().toString();
所以,Uri.parse(text)
将的onClick
发生之前返回文本。
但是,如果您使用Uri.parse(editText.getText().toString)
,它将在onClick
调用(实时)时解析文本。