在代码中设置textview文本

时间:2014-10-21 18:00:02

标签: java android

有人可以告诉我哪里出错了吗?

我正在尝试将我的文本视图MyText更改为其他内容,但是当我尝试时我收到错误:

引起:java.lang.NullPointerException:尝试在空对象引用上调用虚方法'android.view.View android.view.Window.findViewById(int)' 在android.app.Activity.findViewById(Activity.java:2071)

public class MainScreen extends Activity {
    TextView texting = (TextView) findViewById(R.id.MyText);

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main_screen);
        texting.setText("Test");

};
}

3 个答案:

答案 0 :(得分:4)

这就是你的代码的样子:

public class MainScreen extends Activity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main_screen);

        // If you're not using this view anywhere, you don't have to declare it globally. Use only a local variables
        TextView texting = (TextView) findViewById(R.id.MyText);
        texting.setText("Test");

    };
}

您应该在拥有根布局后始终初始化视图。在这种情况下,你做了setContentView(R.layout.activity_main_screen)之后;此方案适用于Activites。

如果您使用片段,则应在onCreateView方法中夸大根布局后立即执行此操作。类似的东西:

@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
    View view = (LinearLayout) inflater.inflate(R.layout.my_fragment, container, false);
    // THIS is where you start initializing your views
    return view;
}

答案 1 :(得分:1)

在调用setContentView之前,TextView不可用。因此,findViewById将在MainScreen实例化时返回null。解决方案是将findViewById调用移至onCreate方法,如下所示:

public class MainScreen extends Activity {
    TextView texting;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main_screen);

        texting = (TextView) findViewById(R.id.MyText);

        texting.setText("Test");

    }
}

答案 2 :(得分:1)

执行以下操作:

public class MainScreen extends Activity {
    TextView texting;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main_screen);

        texting = = (TextView) findViewById(R.id.MyText);
        texting.setText("Test");

    };
}

您必须在onCreate方法中初始化TextView对象。