Android:在 Activity 中声明视图组件的最佳做法是什么?

Android: What is best practice for declaring View components in an Activity?

android 中的典型 activity。

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

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

视情况而定!

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

的其他方法更新的内容来说是正确的。

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

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

看你写什么。我将对此进行 总结

  1. 如果您在 onCreate 之外声明视图,您将能够在 activity/fragment.

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

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

拇指规则,如果要在其他函数中使用,请在class中声明