我是Android开发的新手,到目前为止,我一直在搞清楚如何让教程代码在我正在构建的应用程序中工作。我正在努力理解在哪里声明变量以及为什么我复制并粘贴一些最终会出错的教程。
例如,我正在尝试学习如何使用ViewFlipper。从这个tutorial我有Eclipse的问题告诉我,当我在OnClick中使用它时,vf不是变量。所以当我移动这条线时:
ViewFlipper vf = (ViewFlipper)findViewById(R.id.viewFlipper1);
就在我的OnCreate方法之上,然后就可以了。为什么我会在OnCreate中看到如此多的教程和变量,为什么它对我不起作用?声明它们的适当位置在哪里?我理解封装和继承的基础知识,OnCreate就像任何其他方法一样,并且在那里声明的任何变量都与其他方法隔离?我的按钮怎么样,我应该在课堂上但是在OnCreate之外声明那些吗?
答案 0 :(得分:4)
为什么我会看到
OnCreate
中声明的变量有这么多教程,为什么它对我不起作用?
在方法中声明变量,或者在外部,实际上归结为您想要与变量关联的scope
类型。
在方法内部,您需要注意在打算使用变量之前声明变量。
声明变量的位置的声明它们的适当位置在哪里?
适当性完全取决于您想要使用它的位置。在类级别声明变量,当您只打算在方法中使用它时是不明智的。并且在方法中声明变量,当类中的许多其他方法想要访问它时,并且最终将变量传递给每个方法 - 也是不明智的。所以现在,您可以考虑:
我想补充一点, 1 和 2 是不可以盲目应用的通用规则 - 但要下车一开始,您可以关注它们,直到找出与变量范围,访问规范和生命周期相关的更深层次的细微差别。
我这里不是在讨论访问说明符,因为它们值得详细了解,你可以得到here。我也没有在这里讨论过实例与类变量的区别,因为你最好引用像this one这样的官方文档。
我理解封装和继承的基础知识,
onCreate
就像任何其他方法一样,并且在那里声明的任何变量都与其他方法隔离?
这是正确的。
我的按钮怎么样,我应该在课堂上但是在
onCreate
之外宣布那些?
Android中的UI组件通常需要多种方法才能访问。 TextView
,Button
等 - 通常需要在不同的时间根据不同的方法更改状态 - 因此您最好在课堂级别声明它们。
您希望在类级别声明UI变量的另一个重要原因是,您可以减少让Android框架为每个方法调用创建它们的开销。只要您的Activity
实例处于活动状态,框架就会保留在UI组件/变量上。
答案 1 :(得分:0)
onCreate就像任何其他方法一样,所有关于封装和变量范围的java规则都适用于它。在onCreate方法之外将ViewFlipper变量声明为类成员。但是在onCreate方法中实例化它,就像教程所说的那样。
android中的所有内容都与java中的一样。这里遵循java的所有编程规则。
答案 2 :(得分:0)
这是因为在onCreate方法之外,变量对于您的类是全局的。 Aka,您班级中的任何方法都可以访问这些变量。在onCreate中声明变量时,这些变量只能在oncreate方法的括号内访问。你应该在onCreate方法之外声明你的变量,并在onCreate方法中初始化它们:
ViewFlipper vf;
onCreate(....)
vf = (ViewFlipper) findViewById(R.id.viewFlipper1);
然后设置你的onClickListener