3

我正在使用一个意图来启动另一个活动,并使我的意图携带一些数据作为新创建的活动的额外内容。我正在遵循一个教程来做到这一点。

该数据实际上是从层次结构中第一个活动的文本字段中读取的,并作为额外的传递到另一个活动。所以我的代码将是:

//Make the intent   

Intent intent = new Intent(this, SecondActivity.class);

/* Find the text field (view) which contains the data, and save it into a newly created text field (view of the same type)*/

EditText editText = (EditText) findViewById(R.id.iden1); //******************************

//Read that view's string data into a string called message

String message= editmessage.getText().toString();

//copy this message into the extra named extra_name, of intent.

intent.putExtra(extra_name, message);

我的问题来自这个陈述:

EditText editText = (EditText) findViewById(R.id.iden1);

我的问题是显式转换,即(EditText)。为什么我们要将 findViewById() 返回的 EditText 视图(在 layout.xml 中定义并由 android:id="@+id/iden1" 标识)再次转换为 EditText 视图。这里视图editText的类型和layout.xml中创建的视图是一样的。那么这种类型转换的意义何在?

4

2 回答 2

6

关键是findViewById(int id)返回一个通用View对象。此方法不会解析您的 xml 以了解您的视图是哪种类型。它只是View根据您的文件建立的关系创建一个新对象,R.java由您的IDE(我想是Eclipse)构建。

需要转换结果,findViewById(int id)因为您没有转换EditText对象,而是转换视图,这EditText只是一个规范。

于 2013-11-03T10:45:02.623 回答
3

findViewById返回一个View。如果您需要使用派生类的方法,则需要强制转换。如果您只需要使用基类的方法,则可以避免强制转换

于 2013-11-03T10:41:37.127 回答