/** Called when the user clicks the Send button */
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);
startActivity(intent);
}
在
行EditText editText = (EditText) findViewById(R.id.edit_message);
EditText
是班级和
editText
是我们正在创建的实例。
findViewById(R.id.edit_message)
是方法,R.id.edit_message
是我们传递的参数
但我无法理解为什么会有(EditText)
存在?
它是对构造函数的调用吗?
答案 0 :(得分:6)
这是明确的类型转换。 findViewById()
返回View
,(EditText)
显式地将其转换为EditText
(View
的子类)。这是有效的,因为实际返回的对象是-a EditText
,即该类的对象或其子类之一。如果不是,您将获得ClassCastException
。
了解详情:http://docs.oracle.com/javase/tutorial/java/IandI/subclasses.html
答案 1 :(得分:3)
is it the call to constructor?
没有
EditText editText = (EditText) findViewById(R.id.edit_message);
上面一行(EditText)
中的用于类型转换..
findViewById()
返回View
对象。因此我们将其类型转换为EditText
对象。
EditText
是View
类的子类。
答案 2 :(得分:2)
在以下一行......
EditText editText = (EditText) findViewById(R.id.edit_message);
findViewById(R.id.edit_message)
返回一个视图......但是这个视图是概括的概念,它可以是任何类型的视图。因此,您无法从此返回的视图中确定这是哪种类型。这就是为什么你必须Cast
将视图返回到特定视图的原因。在此处,返回的视图使用EditText
向下转换为(EditText)
。
答案 3 :(得分:1)
findViewById(R.id.edit_message)
返回课程View
。 EditText
从此课程延伸,这就是我们需要将View
投射到EditText
的原因。
如果我们需要View类,那么我们只需编写View v = findViewById(R.id.some_view);
答案 4 :(得分:-1)
<EditText android:id="@+id/edit_message" <<<<<<<<<<<<<<<<<<
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_weight="1"
android:hint="@string/edit_message"/>