【问题标题】:Should Views and ViewGroups conventionally be declared as instance or local variables in Activities?Views 和 ViewGroups 应该按照惯例在活动中声明为实例变量还是局部变量?
【发布时间】:2014-02-08 18:50:32
【问题描述】:

决定哪些变量应该是实例变量,哪些应该在扩展 Activity 的类中本地声明似乎不像其他类型的对象那样直观。

对于确实扩展 Activity 的类,你在哪里声明 ViewsViewGroups,假设在 onCreate() 方法和实例变量中声明它们都有效。哪个是约定?

【问题讨论】:

  • 如果您需要在多个不相关的方法中访问(以避免多次昂贵的 findViewById 调用),请保留它们的成员,否则为本地。就这么简单。

标签: java android view viewgroup


【解决方案1】:

因此,扩展 Activity 的类不像我们处理的日常对象那样很容易区分哪些变量应该是实例变量,哪些应该是本地声明的。

确实如此。在需要它们的地方声明它们。如果您只需要以某些方法访问它们以说出设置文本或其他内容,那么在此处声明它们。如果您在多个方法中需要它们,请将它们声明为成员变量。

假设在 onCreate() 方法和实例变量中声明它们都有效。

为什么要在两个地方声明它们?

什么是约定?

请参阅此答案的第一部分。通常我将它们声明为成员变量并在 onCreate() 中初始化它们,因为我似乎在多个地方都需要它们,而且我喜欢将它们放在一个地方。

只需确保在调用setContentView() 之后初始化它们,否则它们将是null

【讨论】:

  • 我的意思不是在两个地方都声明它们;我的意思是......就像在onCreate() 中声明它时在哪里声明它一样,或者作为实例变量工作。不过你回答了这个问题。
  • 好的,很高兴我能回答。 onCreate() 与任何其他方法一样,如果您在那里声明它,它将是该方法的本地方法。
【解决方案2】:

Android 中的Activity 代表UI 对象的一部分,比如说"window"。 Activity 有一些组件 - 带有Views 的布局。

如果您想在activity 类的许多方法中使用您的视图,请将它们声明为实例变量。因为使用findViewById 查找它们只会进行一次。然后你可以通过使用实例变量来多次使用它们。

如果您将视图引用本地化,那么它们的范围将会缩小。

【讨论】:

  • 当你不需要在其他方法中使用它们的引用时怎么办?你还会将它们声明为实例变量吗?
  • 如果您不想在其他方法中使用它们,请在 onCreate 本地使用一次。简单的。您需要选择适合您的解决方案;)
【解决方案3】:

如果活动包含视图/视图组,建议将它们声明为活动类中的私有成员。

简单地说:)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2010-12-31
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-11-28
    • 1970-01-01
    相关资源
    最近更新 更多