【问题标题】:is it wrong? TextView displayTextView = (TextView)findViewById(R.id.DisplayTextView);这是错的吗? TextView displayTextView = (TextView)findViewById(R.id.DisplayTextView);
【发布时间】:2012-02-01 06:59:52
【问题描述】:

大家,我是android开发的新手。现在我有一个自己无法解决的问题。下面的代码有什么问题(尤其是代码中标记的那一行)?

MainActivity.java:

package com.amaker.ch02.app;

import android.app.Activity;
import android.os.Bundle;
import android.widget.TextView;

public class MainActivity extends Activity {
    /** Called when the activity is first created. */
    private TextView displayTextView = (TextView)findViewById(R.id.DisplayTextView);  <--Possibly this line

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);

        displayTextView.setText("change in the code"); 
    }
}

运行,我在 AVD 中收到一条消息:应用程序已意外停止。请再试一次。但是如果我没有在声明后立即分配displayTextView,IOW我将代码更改如下,那么一切顺利。

package com.amaker.ch02.app;

import android.app.Activity;
import android.os.Bundle;
import android.widget.TextView;

public class MainActivity extends Activity {
    /** Called when the activity is first created. */
    private TextView displayTextView;

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
        displayTextView = (TextView)findViewById(R.id.DisplayTextView);
        displayTextView.setText("change in the code"); 
    }
}

为什么?这两个代码有什么区别吗?

【问题讨论】:

    标签: android textview assign


    【解决方案1】:

    在您调用setContentView(R.layout.main) 之前,TextView 不是活动视图层次结构的一部分。当你像这样声明变量时:

    private TextView displayTextView = (TextView)findViewById(R.id.DisplayTextView);
    

    视图还不存在,所以displayTextView 被设置为null。然后,当您尝试在 onCreate() 中调用 setText() 时,您会得到一个 NullPointerException

    【讨论】:

    • +1。 findViewById 默认为 Activity 的布局。由于活动的布局在 setContentView 中“初始化”
    【解决方案2】:

    因为文本视图未设置为您的活动内容,而您正试图找到它。文本视图仅在创建时绑定到您的活动,当您将内容设置为您的内容后调用setContentView()活动,您可以从该内容中获取Views。

    【讨论】:

      【解决方案3】:

      试试这个。

      public class MainActivity extends Activity 
      {     
      
          /** Called when the activity is first created. */     
            private TextView displayTextView;
          @Override     
          public void onCreate(Bundle savedInstanceState) 
           {         
              super.onCreate(savedInstanceState);         
              setContentView(R.layout.main);    
              displayTextView = (TextView)findViewById(R.id.DisplayTextView);         
              displayTextView.setText("change in the code");      
           }
          } 
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2014-08-14
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2014-05-09
        相关资源
        最近更新 更多