在onCreate()中放置setContentView()的位置?

时间:2015-06-14 11:04:33

标签: java android android-activity

我是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()   差异?

3 个答案:

答案 0 :(得分:9)

setContentView()字面上设置了您的Activity的视图。如果您尝试执行类似TextView tv=(TextView) findViewById(R.id.tv);的操作,则无法查找,因为您尚未设置视图,因此您的应用程序崩溃了。这就是您在尝试访问视图之前应该放置setContentView()的原因。

答案 1 :(得分:0)

您可以在setContentView()方法之前执行所需的任何代码,只要它不引用视图的(部分),但尚未设置。

由于您的tv变量引用了View的内容,因此无法执行。

答案 2 :(得分:0)

在声明TextView之后定义setContentView()时,你做错了,因为你在TextView中初始化的对象ID包含在该类中,在该类中未知,直到执行seConteView()为止。