2014-11-02 120 views
2

我试图从第二个活动中获取数据,因此我使用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),它只是作品。

那么他们之间究竟有什么不同呢?

回答

0

既然你这样做:

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

final关键字“冻结”的文本值(以可能是一个空字符串,因为它看起来你是在初始化函数)。因此,无论何时在onClick()内使用text,它都会引用冻结值text。如果你想的editText在该按钮被点击时的电流值,你需要获取内部onClick()值:

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

请注意,你需要为editTextfinal关键字,否则你将无法在onClick()之内使用它。

1

,因为这将有不同的价值:

你把这个代码onClick

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

所以,Uri.parse(text)将的onClick发生之前返回文本

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

相关问题