为什么我们用这种方式来初始化Button。
b1=(按钮) findViewById(R.id.bEdit1);
以及为什么我们在 findViewById 之前使用 (Button)。
谢谢
这是因为findViewById
被声明返回一个View
. 您需要向下转换返回值以将其分配给Button
变量。(我假设您发布的代码b1
被声明为Button
.)
请注意,如果bEdit1
不对应Button
于视图层次结构中的 a,那么这将生成一个ClassCastException
. 这应该是您在开发过程中发现的东西。
视图可能有一个与之关联的整数 id。这些 id 通常在布局 XML 文件中分配,用于在视图树中查找特定视图。一个常见的模式是:
Define a Button in the layout file and assign it a unique ID.
<Button
android:id="@+id/bEdit1"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@string/my_button_text"/>
从 Activity 的 onCreate 方法中,找到 Button
Button myButton = (Button) findViewById(R.id.bEdit1);
视图 ID 在整个树中不必是唯一的,但最好确保它们至少在您正在搜索的树的一部分中是唯一的。
While working with Java
we do something like this
JButton mbutt = new JButton("Click_Me");
In above code we are Creating
and Assigning
an Object of Type JButton
to the Object Reference Variable of type JButton
.
While we work with Android
we do something like this
Button b1 = (Button) findViewById(R.id.bEdit1);
Here we have already created the Button
using the XML
, and is now referring to that Button object
using the above statement.
(Button)
is an explicit cast done from View
type to Button
type. What we get from findViewById is a View, now we have to mention specifically what kinda view it is, here its Button.
(R.id.bEdit1)
是在R.java
File 中声明的整数,因此我们必须将其转换为 Button 以获取它的引用。
R.java
文件包含应用程序的所有变量声明。
findViewById的签名看起来像
public final View findViewById (int id)
这将寻找具有给定 id 的子视图。如果此视图具有给定的 id,则返回此视图。
final Button b1;
findViewById(R.id.bEdit1); 现在它将根据 Id 查找视图bEdit1
并将视图返回给您,现在您的工作是将其转换为适当的视图。这就是我们这样做的方式
b1 = (Button)findViewById(R.id.bEdit1);