有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

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 ?


共 (3) 个答案

  1. # 1 楼答案

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

    由于tv变量引用视图的内容,因此无法执行

  2. # 2 楼答案

    当您在声明TextView后定义setContentView()时,您的做法是错误的,因为您在TextView中初始化的对象Id包含在该布局中,在执行seConteView()之前,该布局在类中是未知的

  3. # 3 楼答案

    setContentView()按字面意思设置活动的视图。如果你尝试执行TextView tv=(TextView) findViewById(R.id.tv);之类的操作,那么就没有要查找的视图,因为你还没有设置视图,因此你的应用程序会崩溃。这就是为什么在尝试访问视图之前应该放置setContentView()