我没有收到任何错误,但是当我运行应用程序时它会崩溃:
public class MainActivity extends AppCompatActivity {
ImageButton Nr1 = (ImageButton) findViewById(R.id.ImageButton1);
public void machwas(View v) {
Nr1.setImageResource(R.drawable.x);
}
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
}
}
答案 0 :(得分:1)
您必须在创建视图后调用findViewById。
public class MainActivity extends AppCompatActivity {
ImageButton Nr1 ;
public void machwas(View v){
Nr1.setImageResource(R.drawable.x);
}
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
Nr1 = (ImageButton)findViewById(R.id.ImageButton1);
machwas(0);
}
}
答案 1 :(得分:1)
findViewById()
搜索由setContentView()
设置的视图。在您的代码findViewById()
之前调用onCreate()
,因此尚未设置任何视图,并且由于所有查找都将失败,您将始终获得null
。
BTW:考虑使用像ButterKnife这样的帮手
答案 2 :(得分:0)
这是错误的:
public class MainActivity extends AppCompatActivity {
ImageButton Nr1 = (ImageButton)findViewById(R.id.ImageButton1);
因为findViewById()
应该在onCreate
方法中调用,原因是之后布局膨胀并且您已准备好获取视图并初始化小部件...
所以你正在做的是错误地初始化ImageButton,可能在该行之后为null然后在这里
public void machwas(View v){
Nr1.setImageResource(R.drawable.x);
}
将以NullPointer异常爆炸......
但这只是一个推断,因为你不发布LogCat ......
有关详细信息,请查看活动生命周期和Official Android Documentation