TextView.setText(Android)导致崩溃..任何想法为什么?

时间:2013-08-08 20:01:02

标签: android string textview settext

尝试开始Android开发,并使用TextViews做一些基本的工作..

由于某种原因TextView的setText()方法给我带来了很大的问题..这是我的代码的简化版本,以显示我的意思:

package com.example.testapp;

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

public class MainActivity extends Activity {

    TextView text;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        text = (TextView) findViewById(R.id.text1);  
        setContentView(R.layout.activity_main);
        text.setText("literally anything");
    }
}

这会导致崩溃,我不明白为什么..如果我在onCreate中创建TextView它工作正常,但如果我在它之外创建它,它不会..为什么会这样?有“TextView文字”这一行吗?尚未被执行或什么?

谢谢!

4 个答案:

答案 0 :(得分:9)

您需要在初始化TextView之前调用setContentView(),以便您的Activity可以访问所有布局组件。

setContentView(R.layout.activity_main);
text = (TextView) findViewById(R.id.text1);  

text.setText("literally anything");

答案 1 :(得分:3)

切换这2行

text = (TextView) findViewById(R.id.text1);  
    setContentView(R.layout.activity_main);

您需要先设置内容

答案 2 :(得分:2)

来自docs:

  

onCreate(Bundle)是初始化活动的地方。最   重要的是,在这里你通常会用一个调用setContentView(int)   布局资源定义您的UI,并使用findViewById(int)来   检索该UI中需要与之交互的小部件   编程。

所以这意味着如果你将在布局中引用你的视图,你必须首先设置内容视图然后调用findViewById方法来引用定义你的活动的UI的布局资源的子视图

答案 3 :(得分:2)

text = (TextView) findViewById(R.id.text1);  
setContentView(R.layout.activity_main);
text.setText("literally anything");

如果“字面上任何东西”是变量(通常可能是这种情况),请确保它不会抛出NullPointerException。我自己一直有这个问题。我把它修好为:

    text = (TextView) findViewById(R.id.text1);  
    setContentView(R.layout.activity_main);
    try {
         text.setText("literally anything");
    } catch (NullPointerException e) {
         // Do something
    }

例外可能非常有用,所以如果你是一名初学程序员,我建议你把异常处理放在你要列出的事情清单上。