我是Android的初学者,我想知道为什么在定义 TextView 后放置 setContentView()时,我的应用程序崩溃了,即
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
TextView tv=(TextView) findViewById(R.id.tv);
Linkify.addLinks(tv, Linkify.WEB_URLS|Linkify.EMAIL_ADDRESSES|
Linkify.PHONE_NUMBERS);
setContentView(R.layout.activity_main); //After TextView
}
但是当我在定义TextView之前放置 setContentView()时,我的应用运行正常。
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main); //Before TextView
TextView tv=(TextView) findViewById(R.id.tv);
Linkify.addLinks(tv, Linkify.WEB_URLS|Linkify.EMAIL_ADDRESSES|
Linkify.PHONE_NUMBERS);
}
为什么会这样&以及如何在之前添加setContentView() 差异?
答案 0 :(得分:9)
setContentView()
字面上设置了您的Activity的视图。如果您尝试执行类似TextView tv=(TextView) findViewById(R.id.tv);
的操作,则无法查找,因为您尚未设置视图,因此您的应用程序崩溃了。这就是您在尝试访问视图之前应该放置setContentView()
的原因。
答案 1 :(得分:0)
您可以在setContentView()
方法之前执行所需的任何代码,只要它不引用视图的(部分),但尚未设置。
由于您的tv变量引用了View的内容,因此无法执行。
答案 2 :(得分:0)
在声明TextView之后定义setContentView()时,你做错了,因为你在TextView中初始化的对象ID包含在该类中,在该类中未知,直到执行seConteView()为止。