Android:在活动中声明View组件的最佳做法是什么?

时间:2015-08-22 18:07:13

标签: android design-patterns view components declare

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);    
    }
}

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

3 个答案:

答案 0 :(得分:1)

这取决于!

如果您需要访问onCreate之外的视图组件,在该类的其他方法中(未从onCreate调用),则可以选择将对这些视图组件的引用存储为实例变量。对于像文本视图,列表视图等可能必须从类的其他方法更新的内容,情况确实如此。

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

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

答案 1 :(得分:1)

这取决于你写的东西。我会说一个摘要

  1. 如果您在onCreate之外声明视图,则可以在活动/片段中的任何方法中使用这些视图。

  2. 但是如果你在像onCreate这样的方法中声明视图,那么你将无法在任何其他方法中再次引用这些视图。它只能在您编写视图声明的方法中引用。

  3. 然而,从我的编码经验来看,我总是喜欢在onCreate之外宣布它们。它具有更多的可访问性,您不会丢失任何东西。

答案 2 :(得分:0)

Thumb-rule,如果要在其他函数中使用,则在类中声明