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

Pra*_*shi 5 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 
}
Run Code Online (Sandbox Code Playgroud)

但是当我在定义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);
}
Run Code Online (Sandbox Code Playgroud)

为什么会这样以及如何添加setContentView()才能产生差异?

Bid*_*han 9

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