解释语法EditText editText =(EditText)findViewById(R.id.edit_message);

时间:2014-02-19 11:33:37

标签: java android

/** 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)存在? 它是对构造函数的调用吗?

5 个答案:

答案 0 :(得分:6)

这是明确的类型转换。 findViewById()返回View(EditText)显式地将其转换为EditTextView的子类)。这是有效的,因为实际返回的对象是-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对象。

EditTextView类的子类。

答案 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)返回课程ViewEditText从此课程延伸,这就是我们需要将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"/>