2015-06-14 41 views
5

我在Android的初學者,我想知道爲什麼是它,當我把我的的setContentView()定義的TextView後,我應用程序崩潰,即在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); 
} 

爲什麼它是&以及如何增加的setContentView()之前使 區別?

回答

8

setContentView()從字面上設置您的活動的意見。如果您嘗試執行類似TextView tv=(TextView) findViewById(R.id.tv);的操作,則無法查找,因爲您尚未設置視圖,從而導致應用崩潰。這就是爲什麼你應該把setContentView(),然後再嘗試訪問您的意見。

+0

我想知道你是否可以幫我解決這個問題http://goo.gl/d5opg5。我承諾,這不是那些「修復這個對我來說」的問題。 – Axel

0

只要沒有引用尚未設置的視圖(的部分),您就可以在setContentView()方法之前執行任何代碼。

由於您的tv變量引用了視圖的內容,因此無法執行。

0

當您在聲明TextView之後定義setContentView()時,您做錯了,因爲您在TextView中初始化的對象Id包含在該佈局中,直到執行了seConteView()之前,該類在該類中是未知的。