0

为什么我们用这种方式来初始化Button。

b1=(按钮) findViewById(R.id.bEdit1);

以及为什么我们在 findViewById 之前使用 (Button)。

谢谢

4

5 回答 5

2

这是因为findViewById被声明返回一个View. 您需要向下转换返回值以将其分配给Button变量。(我假设您发布的代码b1被声明为Button.)

请注意,如果bEdit1不对应Button于视图层次结构中的 a,那么这将生成一个ClassCastException. 这应该是您在开发过程中发现的东西。

于 2012-10-17T04:31:39.350 回答
1

视图可能有一个与之关联的整数 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 在整个树中不必是唯一的,但最好确保它们至少在您正在搜索的树的一部分中是唯一的。

于 2012-10-17T04:34:46.657 回答
0

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.

于 2012-10-17T04:42:05.080 回答
0

(R.id.bEdit1)是在R.javaFile 中声明的整数,因此我们必须将其转换为 Button 以获取它的引用。

R.java文件包含应用程序的所有变量声明。

于 2012-10-17T04:31:55.273 回答
0

findViewById的签名看起来像

public final View findViewById (int id)

这将寻找具有给定 id 的子视图。如果此视图具有给定的 id,则返回此视图。

final Button b1;

findViewById(R.id.bEdit1); 现在它将根据 Id 查找视图bEdit1并将视图返回给您,现在您的工作是将其转换为适当的视图。这就是我们这样做的方式

b1 = (Button)findViewById(R.id.bEdit1);

于 2012-10-17T04:47:02.747 回答