这两个按钮有什么区别? Android编程

时间:2012-01-12 03:03:25

标签: android eclipse

好的,我刚刚开始在Eclipse中编写一些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);

6 个答案:

答案 0 :(得分:1)

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

正如您在documentation中看到的那样,ViewTextView的超类,而TextViewButton的超类。

哪一个更好?这取决于。如果您需要使用特定于Button的功能,则首选第二种方式。另一方面,如果View对象足够,则使用第一种方式。

答案 1 :(得分:1)

我喜欢你的思维方式。在android中,每个小部件都是view.I将告诉你的步骤 -

1)

首先重要的是每个按钮都是视图,但不一定每个视图都应该按下

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

你正在使用它并不意味着newButton总是一个Button.We可以将任何View引用(例如LinearLayout,ImageButton等)stroe到newButton

但在第二种情况下

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

如果R.id.main_new_button是XML中的按钮ID,那么newButton肯定应该是Button

2) -

  

正如我所说,我们知道每个Button都是View但我们不知道哪个View是button.That它要求你施放findViewByid.And你的第一个案例不鼓励因为每个视图都有自己的方法,如果我们推广它们就无法使用这个观点。所以我们必须专门使用Button。

希望你明白了

答案 2 :(得分: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);

答案 3 :(得分:0)

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

答案 4 :(得分:0)

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

答案 5 :(得分:0)

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