2012-01-12 57 views
4

刚刚开始在Eclipse中编程一些android,我对此有点傻眼。以下是本书中编写按钮程序的两种方法,除了第一种看起来更简单和更短外,它们都可以正常工作。哪个更好?为什么?这两个按钮有什么区别? Android编程

View newButton = findViewById(R.id.main_new_button); 
newButton.setOnClickListener(this); 


Button newButton= (Button) this.findViewById(R.id.main_new_button); 
newButton.setOnClickListener(this); 

回答

0

Button是一个扩展TextView的小部件。 TextView扩展了一个View。如果你去了Button类,你将会接触到更具体的成员函数,而不是前面提到的超类。至于那些具体的方法是什么...你必须进入android.widget.Button类来探索=)。在做这件事时,我看到的只有三个构造函数(用于明确声明按钮) - 所有其他成员函数都是相同的。

public Button(android.content.Context context); 
public Button(android.content.Context context, android.util.AttributeSet attrs); 
public Button(android.content.Context context, android.util.AttributeSet attrs, int defStyle); 

但是,如果你不想混淆自己的路线,当你3个月,或其他开发人员与你一起工作的方回来后,这个代码,第二个方法是用正确的方法:

Button newButton= (Button) this.findViewById(R.id.main_new_button); 
newButton.setOnClickListener(this); 
1

这两种形式是等价的。在这两种情况下,findViewById都会返回一个View对象,唯一的区别是在第二个版本中,显式强制转换为Button,这是View的一个子类。

正如你可以在documentation看到,ViewTextView超,和TextViewButton超。

哪一个更好?这取决于。如果您需要使用特定于Button的功能,则第二种方式是优选的。另一方面,如果一个物体足够了,那就用第一种方法。

0

如果你想要一个按钮,你需要后者的形成。表单的形式是好的,但它不是一个完美的方法。因为视图的用法不仅仅是按钮。

0

在第二种情况下,您已将结果转换为正确的类型。这允许您访问Button特定的方法。第一个只返回View对象,虽然它是Button。所以你将无法访问Button特定的功能。

+0

我只注意到'Button'没有定义任何自己的公共方法。我的观点仍然成立,因为'Button'从'TextView'延伸,它具有更多的功能,只是'View'。 – curioustechizen 2012-01-12 03:12:44

0

由View构建的按钮是一个视图,而不是按钮小部件。如果您从View类创建按钮,则无法调用Button Class的功能。 View类和Button类都具有“setOnClickListener”函数,但View类的函数与Button中的函数不同。

1

我喜欢你的Android thinking.In方式每一个部件是view.I会告诉你在step--

1)

第一重要的是每个按钮查看,但不一定每个视图应按钮

View newButton = findViewById(R.id.main_new_button); 
    newButton.setOnClickListener(this); 

你正在使用它,这并不意味着该newButton总是Button.We可以Stroe的任何视图引用(前。的LinearLayout,ImageButton的等),以newButton

但是在第二种情况下

Button newButton= (Button) this.findViewById(R.id.main_new_button); 
newButton.setOnClickListener(this); 

newButton绝对是应该按钮如果R.id.main_new_button是在XML按钮ID

2) -

正如我所说我们知道每个按钮都是视图,但我们不知道哪个视图是按钮。这就是要求您投出findViewByid。并且您的第一种情况令人沮丧,因为每个视图都有自己的方法,如果我们的基因不能使用把这个观点拉开来。所以我们必须特别使用Button。

希望你得到它

+0

它有助于你解决你的问题吗?然后考虑问题接受答案 – Sameer 2012-01-12 05:05:19