我正在查看我的代码,并且我意识到至少有3种方法可以在代码中获取小部件的引用:
第一个(在onCreate之前):
private TextView textView= (TextView) findViewById(R.id.textView);
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main_layout);
}
第二个(在onCreate中):
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main_layout);
final TextView textView= (TextView) findViewById(R.id.textView);
}
第三个(在onCreate中创建和设置):
private TextView textView;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main_layout);
textView= (TextView) findViewById(R.id.textView);
}
这三种方法有什么区别?我什么时候应该使用它们?
答案 0 :(得分:1)
您必须先致电setContentView()
之前致电findViewById()
,因此,第一种方法将始终为您null
。对于final
关键字,第2个和第3个相同,但这是Java feature,而不是Android的。
答案 1 :(得分:0)
第一个不保证您的窗口小部件实际被实例化,它不在onCreate中。
第二个将被实例化,但它的值不能改变,因为它成为最终的常量。
第三,它是一个全局变量,将在onCreate中实例化,您可以在代码的任何其他部分使用它。
答案 2 :(得分:0)
如果您需要致电findViewById()
,则应在setContentView
之后的任何地方拨打电话。不是在你的第一个选项之前。您的第三个选项创建一个实例变量,只有在整个课程中访问很多文本视图时才使用它,否则只需在需要的地方调用findViewById
。