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);
}
}
在这两种情况下,组件都可以按预期工作,并且可以按预期使用。但是,在主要活动或片段中声明类似的视图时,是否应该遵循编程实践或模式?或者它无关紧要。
答案 0 :(得分:1)
这取决于!
如果您需要访问onCreate
之外的视图组件,在该类的其他方法中(未从onCreate
调用),则可以选择将对这些视图组件的引用存储为实例变量。对于像文本视图,列表视图等可能必须从类的其他方法更新的内容,情况确实如此。
如果您不需要onCreate
之外的视图组件,那么就不需要将它们作为实例变量。这通常适用于按钮,一旦您定义setOnClickListener
,您可能不需要再次访问该组件。
很少有开发人员喜欢为所有视图组件声明实例变量。有些甚至将它们声明为static
变量,并从其他类访问它们 - 甚至滥用它在活动之间共享数据。在一个多成员团队中,这些约定很难维护 - 一些变量被声明为成员变量,有些变量被遗漏。很多时候,一些成员变量永远不会在onCreate
之外访问,并且会增加代码中的混乱。
答案 1 :(得分:1)
这取决于你写的东西。我会说一个摘要。
如果您在onCreate之外声明视图,则可以在活动/片段中的任何方法中使用这些视图。
但是如果你在像onCreate这样的方法中声明视图,那么你将无法在任何其他方法中再次引用这些视图。它只能在您编写视图声明的方法中引用。
然而,从我的编码经验来看,我总是喜欢在onCreate之外宣布它们。它具有更多的可访问性,您不会丢失任何东西。
答案 2 :(得分:0)
Thumb-rule,如果要在其他函数中使用,则在类中声明