Android:在 Activity 中声明 View 组件的最佳实践是啥? [关闭]

Posted

技术标签:

【中文标题】Android:在 Activity 中声明 View 组件的最佳实践是啥? [关闭]【英文标题】:Android: What is best practice for declaring View components in an Activity? [closed]Android:在 Activity 中声明 View 组件的最佳实践是什么? [关闭] 【发布时间】:2015-11-16 12:22:07 【问题描述】:

一个典型的 android 活动。

public class MainActivity extends AppCompatActivity 

    /* Should I declare view components here? */
    TextView textView;
    Button button;
    RecyclerView recyclerView;

    @Override
    protected void onCreate(Bundle savedInstanceState)
      super.onCreate(savedInstanceState);

      /* And then create them here */
      textView = (TextView) findViewById(R.id.textview); 
      button = (Button) findViewById(R.id.button);       
      recyclerView = (RecyclerView) findViewById(R.id.recyclerview);   

      /* Or is it better to declare and create them like this? */
      Spinner spinner = (Spinner) findViewById(R.id.spinner);
      Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar);    
    

在这两种情况下,组件都会按预期工作并且可以按预期使用。但是,在您的主要活动或片段中声明类似的视图时,是否应该遵循编程实践或模式?还是根本不重要。

【问题讨论】:

【参考方案1】:

这取决于!

如果您需要访问onCreate之外的视图组件,在类的其他方法中,这些方法不是从onCreate调用的,那么您可以选择将这些视图组件的引用存储为实例变量。这适用于文本视图、列表视图等可能需要从类的其他方法更新的内容。

如果您不需要onCreate 之外的视图组件,则无需将它们设为实例变量。这通常适用于按钮,一旦您定义了 setOnClickListener,您可能不需要再次访问该组件。

很少有开发人员喜欢为所有视图组件声明实例变量。有些甚至将它们声明为static 变量,并从其他类访问它们——甚至滥用它在活动之间共享数据。在多成员团队中,这种约定很难维护——一些变量被声明为成员变量,而另一些则被遗漏了。很多时候,某些成员变量永远不会在 onCreate 之外访问,这会增加代码的混乱度。

【讨论】:

【参考方案2】:

拇指规则,如果你想在其他函数中使用,请在类中声明

【讨论】:

【参考方案3】:

这取决于你写什么。我会对此进行总结

    如果您在 onCreate 之外声明视图,您将能够在活动/片段中的任何方法中使用这些视图。

    但是,如果您在 onCreate 之类的方法中声明视图,则根本无法在任何其他不同的方法中再次引用这些视图。它只能在您编写视图声明的方法中被引用。

但是,根据我的编码经验,我总是喜欢在 onCreate 之外声明它们。它具有更多的可访问性,您不会丢失任何东西。

【讨论】:

以上是关于Android:在 Activity 中声明 View 组件的最佳实践是啥? [关闭]的主要内容,如果未能解决你的问题,请参考以下文章

Android Activity标签属性

android activity声明周期学习笔记

Android学习笔记四之Activity

如何android多Activity间共享数据

android支持html5 video标签,实现在线播放吗

Android 四大组件------Activity