我对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);
}
请帮助我理解这个问题。
答案 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。