java - findViewById() 没有被实例化吗?

标签 java android imagebutton

我有一个关于 Android 编程的问题。 当我写这样的 Activity 时:

package com.mathquiz;
import android.widget.ImageButton;
public class ChooseMode extends ActionBarActivity {
    private ImageButton easyButton=(ImageButton)findViewById(R.id.easy_button);
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_choose_mode);
        easyButton.setVisibility(View.INVISIBLE);

}

Eclipse 在第 4 行抛出 NullPointerException 但是,如果我在 onCreate 方法中分配“easyButton”,一切都会好的。

package com.mathquiz;
import android.widget.ImageButton;
public class ChooseMode extends ActionBarActivity {
    private ImageButton easyButton;
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_choose_mode);
        easyButton=(ImageButton)findViewById(R.id.easy_button);
        easyButton.setVisibility(View.INVISIBLE);

}

请帮助我理解这个问题。

最佳答案

它不能像您所说的那样“实例化”,因为在第一个示例中,您还没有设置内容 View 。 Android 的生命周期方法有特定的顺序,在调用构造函数之后发生。

该方法按预期工作,它只是返回 null,因为它当前没有找到任何内容。

此外,使用需要使用当前 Activity 作为 Context 的实例变量将不起作用(在下面的示例中,this 指的是到 ChooseMode 实例)。

例如

public class ChooseMode extends ActionBarActivity {
    private SharedPreferences = PreferenceManager.getDefaultSharedPreferences (this);

使用时会抛出一个NullPointerException

关于java - findViewById() 没有被实例化吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24806766/

相关文章:

java - 为什么 JAR 文件不包含文档?

java - 方法中未使用的局部变量是否会在 JVM 中获取内存?

java - 如何在单个文件中记录MediaPlayer输出和语音?

ImageButton 颜色不改变 onPressed(), onFocus()

java - System.getProperty ("os.name") 在最新的 Windows 操作系统中返回什么

java - 如何获取java程序中打开的文件的完整文件名和路径?

android - 在列表 onItemClick 中使用 Intent

Android 签名 key - 您的 keystore 中有多个 key ?

Android imagebutton如何改变图标大小

java - Android在Imagebutton上设置动态图片