这是Android Studio培训的一部分。创建新Activity时,为什么我们需要将EditText对象转换为EditText对象?
EditText editText = (EditText) findViewById(R.id.edit_message);
完整的方法是: http://developer.android.com/training/basics/firstapp/starting-activity.html
这是Android Studio培训的一部分。创建新Activity时,为什么我们需要将EditText对象转换为EditText对象?
EditText editText = (EditText) findViewById(R.id.edit_message);
完整的方法是: http://developer.android.com/training/basics/firstapp/starting-activity.html
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()
。
EditText
是View
的子类,这就是这种铸造工作的原因。
java.lang.Object
↳ android.view.View
↳ android.widget.TextView
↳ android.widget.EditText
findViewById
返回View
,这对于任何去Android通用类的方法。这意味着ListView
,TextView
,TabHost
等等等都是View
s。
您必须将其施放以使您所使用的对象可以访问该View
的特定方法。例如,ListView
有EditText
没有的方法。
可以投,没有后顾之忧,因为你知道是您正在使用的对象是确实的EditText
。您知道这是因为您在编写布局时明确定义了EditText
,并且已为此View
分配了一个ID,稍后您将使用该ID来标识完全相同的视图。
你怎么知道这是一个EditText
? Android如何知道它?
事实上,Android确实不是知道它,除非你这么说,因为返回类型findViewById()
是View
。虽然EditText
是View
的一种,但还有其他的,可以定义自定义的。演员告诉Android,你承诺View
返回将是一个EditText
,所以它可以把它作为一个。它要求你明确地施展自己的保护 - 以便你知道你正在将自己的知识/假设注入到程序中。
如果您的承诺被发现有误,那么Android会抛出ClassCastException
来对此进行惩罚。
此外,我不知道有多少关于面向对象和Java的问题拥有者知道。因此,通过强制转换,所有EditText特定方法(如.setTextSize(),.getText()等都可用。 –
我有一些Java的经验。这已经有好几年了,所以我正在努力刷新并同时潜入Android。谢谢大家的解释。 – thethomasramsey