findViewById()是不是实例化的?

时间:2014-07-17 14:48:03

标签: java android imagebutton

我对android中的编程有疑问。 当我写这样的活动时:

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 但是,如果我指定" easyButton"在方法onCreate中,一切都会好的。

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);

}

请帮助我理解这个问题。

2 个答案:

答案 0 :(得分:0)

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

该方法按预期工作,它只返回null,因为它在当前时间无法找到。

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

例如

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

使用时会抛出NullPointerException

答案 1 :(得分:0)

未在类变量定义上定义布局。这就是NullPointerException的原因,因为您还没有调用setContentView(R.layout.activity_choose_mode);

如果您想这样做,为了避免大量的电镀,请尝试RoboGuice。视图的一个例子可能是:

@ContentView(R.layout.main)
class RoboWay extends RoboActivity { 
    @InjectView(R.id.name)             TextView name; 
    @InjectView(R.id.thumbnail)        ImageView thumbnail; 
    @InjectResource(R.drawable.icon)   Drawable icon; 
    @InjectResource(R.string.app_name) String myName; 
    @Inject                            LocationManager loc; 

    public void onCreate(Bundle savedInstanceState) { 
        super.onCreate(savedInstanceState); 
        name.setText( "Hello, " + myName ); 
    } 
} 

更多示例和教程是here