我正在看我的代码,我意识到至少有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);
}这三种方法有什么不同?我应该什么时候使用它们?
发布于 2016-07-28 02:21:16
第一种方法并不能保证您的小部件确实是实例化的,它不在onCreate中。
Second将被实例化,但它的值不能更改,因为它将成为一个常量,成为最后一个。
第三,它是一个将在onCreate中实例化的全局变量,您可以在代码的任何其他部分中使用它。
发布于 2016-07-28 02:24:13
您必须在调用findViewById()之前调用setContentView(),因此在第一种方法中,您将始终获得null。第二和第三个是相同的,除了final关键字,但这是Java feature,不是安卓的。
发布于 2016-07-28 02:22:51
如果你需要调用findViewById(),那么调用应该在setContentView之后的任何地方。在此之前,就像你的第一个选择一样。第三种方法创建一个实例变量,仅当文本视图在整个类中被大量访问时才使用它,否则只需在需要的地方调用findViewById。
https://stackoverflow.com/questions/38620419
复制相似问题