2009-12-29 47 views
23

这个问题很简单。 但是我想知道我们到底在哪里引用了gui元素? 作为其中确定最好的地方:如何从EditText获取文本?

final EditText edit = (EditText) findViewById(R.id.text_xyz); 
edit.getText().toString(); 

当我尝试它里面默认做的onCreate()我得到空值。 因此,对于最佳实践,您是否建议使用单独的类来引用main.xml中已定义的这些gui元素。从这里我们可以调用这些元素的各种方法,如gettext或settext?

+2

'edit.getText()。toString()' – luckylukein 2015-07-13 23:35:28

回答

17

那么,这取决于你的需求。很多时候,我会将我对小部件的引用保留在活动中(作为类字段) - 并将它们设置为onCreate方法。我认为这是一个好主意
也许您的空值的原因是您在onCreate()方法中设置contentView()之前试图拨打findViewById() - 请检查该方法。

13

如果您在setContentView()方法调用之前执行此操作,则值将为空。

这将导致空:

super.onCreate(savedInstanceState); 

Button btn = (Button)findViewById(R.id.btnAddContacts); 
String text = (String) btn.getText(); 

setContentView(R.layout.main_contacts); 

,而这将很好地工作:

super.onCreate(savedInstanceState); 
setContentView(R.layout.main_contacts); 

Button btn = (Button)findViewById(R.id.btnAddContacts); 
String text = (String) btn.getText(); 
1
String fname = ((EditText)findViewById(R.id.txtFirstName)).getText().toString(); 
String lname = ((EditText)findViewById(R.id.txtLastName)).getText().toString(); 
((EditText)findViewById(R.id.txtFullName)).setText(fname + " "+lname); 
23

您的问题,最快的解决办法,我相信是你根本就失踪括号您getText。只需将()添加到edit.getText().toString()即可解决此问题

3

将以下内容放在setContentView()方法之后。

final EditText edit = (EditText) findViewById(R.id.Your_Edit_ID); 
String emailString = (String) edit.getText().toString(); 
Log.d("email",emailString);