【问题标题】:Where to place setContentView() in onCreate()?将 setContentView() 放在 onCreate() 的什么位置?
【发布时间】:2015-06-14 11:04:33
【问题描述】:

我是 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() 区别?

【问题讨论】:

    标签: java android android-activity


    【解决方案1】:

    setContentView() 从字面上设置您的 Activity 的视图。如果您尝试执行TextView tv=(TextView) findViewById(R.id.tv); 之类的操作,则找不到视图,因为您尚未设置视图,因此您的应用程序崩溃。这就是为什么您应该在尝试访问您的视图之前输入setContentView()

    【讨论】:

    • 我想知道您是否可以帮助我解决这个问题 goo.gl/d5opg5 。我保证,这不是那些“为我解决这个问题”的问题之一。
    【解决方案2】:

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

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

    【讨论】:

      【解决方案3】:

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2018-10-17
        • 2013-12-24
        • 1970-01-01
        • 1970-01-01
        • 2015-04-21
        • 2013-11-16
        • 2012-11-25
        相关资源
        最近更新 更多