2015-12-09 42 views

回答

3

findViewById()返回View默认情况下,这还不包括类似的方法:

public void sendMessage(View view) { 
    Intent intent = new Intent(this, DisplayMessageActivity.class); 
    EditText editText = (EditText) findViewById(R.id.edit_message); 
    String message = editText.getText().toString(); 
    intent.putExtra(EXTRA_MESSAGE, message); 
} 

该培训项目的更多信息可以在这里找到例如,getText()

EditTextView的子类,这就是这种铸造工作的原因。

java.lang.Object 
    ↳ android.view.View 
     ↳ android.widget.TextView 
      ↳ android.widget.EditText 
+0

此外,我不知道有多少关于面向对象和Java的问题拥有者知道。因此,通过强制转换,所有EditText特定方法(如.setTextSize(),.getText()等都可用。 –

+1

我有一些Java的经验。这已经有好几年了,所以我正在努力刷新并同时潜入Android。谢谢大家的解释。 – thethomasramsey

1

findViewById返回View,这对于任何去Android通用类的方法。这意味着ListView,TextView,TabHost等等等都是View s。

您必须将其施放以使您所使用的对象可以访问该View的特定方法。例如,ListViewEditText没有的方法。

可以投,没有后顾之忧,因为你知道您正在使用的对象是确实EditText。您知道这是因为您在编写布局时明确定义了EditText,并且已为此View分配了一个ID,稍后您将使用该ID来标识完全相同的视图。

1

你怎么知道这是一个EditText? Android如何知道它?

事实上,Android确实不是知道它,除非你这么说,因为返回类型findViewById()View。虽然EditTextView的一种,但还有其他的,可以定义自定义的。演员告诉Android,你承诺View返回将是一个EditText,所以它可以把它作为一个。它要求你明确地施展自己的保护 - 以便你知道你正在将自己的知识/假设注入到程序中。

如果您的承诺被发现有误,那么Android会抛出ClassCastException来对此进行惩罚。

相关问题