为什么我要投一个按钮?

时间:2013-02-14 18:28:41

标签: java android button view casting

这一定是一个非常愚蠢的问题,因为我无法在线找到答案....我知道正在将一种数据类型转换为另一种数据类型。这个按钮如何改变它的数据类型? Button button = (Button)findViewById(R.Bla.Bla)为什么我们不能写Button button = New Button()然后以另一种方式将xml分配给它?请解释一下,我迷路了。

5 个答案:

答案 0 :(得分:6)

可以Button设置为新按钮。

但是findViewById会返回一个视图。如果要访问其任何Button osity,则必须进行转换,否则引用不是按钮。当然,有些时候可能没问题。

答案 1 :(得分:4)

在Android中查看您可以通过两种方式创建UI元素:

<强> 1。通过布局(.xml)文件创建UI元素。     并在java类中使用它们将它们映射到相应的类。     为此,我们必须调用方法findViewById(int id);它返回具有给定id的那个perticuler元素的视图,因此我们必须将它转换为相应的组件。     因此,如果您已经在xml中创建了一个元素,为什么还要在java端再创建一个不同的对象。所以只需映射用xml文件创建的元素。

<强> 2。通过java端crate UI元素。     要使用此功能,必须使用新关键字ex在java中创建元素。按钮按钮=新按钮();然后设置该对象的所有属性。

但是,但是, 根据android哲学,你应该在xml中创建UI,并在java端编写你的核心业务逻辑。使用此概念,您可以编写neet和干净的应用程序代码。 但它只是建议不是强制性的。现在取决于你...... 而且我认为在开始时你会觉得它有所不同,但过了一段时间你会开始喜欢它......

这就是android的美丽。

感谢。我希望,我完全回答了你的问题。

答案 2 :(得分:2)

另外,请记住ButtonView的子类。 findViewById()方法返回您放置在布局文件中的通用View(任何ViewView的子类)。对Button的强制转换是说“没关系 - 我知道这是一个Button,而不仅仅是一个常规视图”,它允许您访问Button中不可用的属性和方法。 View超类。

答案 3 :(得分:2)

final Button callButton = (Button) findViewById(R.id.callButton);

我相信在使用findViewbyId()查找XML视图时,它会在UI中返回视图,但返回的视图必须强制转换才能用作其中的按钮Java代码,并且可以访问按钮方法

有一些方法可以在Java代码中创建一个按钮,而无需在XML中指定它,但这种做法将UI与逻辑区分开来。

另外,在XML中声明UI元素更好,因为通过使用setContentView()可以简化整个布局的过程。

答案 4 :(得分:1)

您有两种方法可以在Android中创建View组件,包括Button

1-在layout XML文件中定义它并使用(Button) findViewById(R.id.button)

访问它

2-在代码中动态创建它,例如Button button = new Button();

两者都有各自的优缺点,例如,在UI xml中定义layout可使您的Activity简洁明了,并通过分隔UI为您提供更大的灵活性从实际代码

动态UI创建在许多需要动态创建Views 的应用程序中非常有用