2015-06-14 40 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()之前,该类在该类中是未知的。