11

尝试开始 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 text;”行 还没有被执行还是什么的?

谢谢!

4

4 回答 4

11

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

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

text.setText("literally anything");
于 2013-08-08T20:02:40.273 回答
3

切换这两条线

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

你需要先设置内容

于 2013-08-08T20:02:17.933 回答
2

来自文档:

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

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

于 2013-08-08T20:09:35.277 回答
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
    }

异常真的很有用,所以如果你是一个初级程序员,我建议你把异常处理放在你很快要学习的东西的清单上。

于 2017-07-19T19:07:56.700 回答