java在onCreate()中放置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);
}
Why it is that & and how adding setContentView() before makes the difference ?
# 1 楼答案
你可以在
setContentView()
方法之前执行你想要的任何代码,只要它不引用(部分)尚未设置的视图由于tv变量引用视图的内容,因此无法执行
# 2 楼答案
当您在声明TextView后定义setContentView()时,您的做法是错误的,因为您在TextView中初始化的对象Id包含在该布局中,在执行seConteView()之前,该布局在类中是未知的
# 3 楼答案
setContentView()
按字面意思设置活动的视图。如果你尝试执行TextView tv=(TextView) findViewById(R.id.tv);
之类的操作,那么就没有要查找的视图,因为你还没有设置视图,因此你的应用程序会崩溃。这就是为什么在尝试访问视图之前应该放置setContentView()