在我的活动中,我有一些观点和surfaceView
。
这是我在onCreate()
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
upBtn = (Button) findViewById(R.id.upBtn);
// and more widget here
surface = (SurfaceView) findViewById(R.id.surfaceView);
this.holder = surface.getHolder(); // NullPointerException
setContentView(R.layout.view);
如果我通过surfaceView
中的getHolder()
和onResume()
来更改上述代码(我已尝试多次获得此结果),则无错误:
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
upBtn = (Button) findViewById(R.id.upBtn);
// and more widget here
// surface = (SurfaceView) findViewById(R.id.surfaceView); //cancel
// this.holder = surface.getHolder(); // cancel
setContentView(R.layout.view);
public void onResume() {
surface = (SurfaceView) findViewById(R.id.surfaceView);
this.holder = surface.getHolder(); // No Error now
请为我解释。
答案 0 :(得分:5)
你需要打电话
setContentView(R.layout.layoutXML);
在致电findViewById(R.id.viewID)
之前。这就是为什么你的findview由id返回nul,你可能在调用surfaceView.getHolder时得到nullPointerException
建议的解决方案是,创建一个layout.xml文件,该文件应该在任何布局中包含surfaceView。
在您的Activity的oncreate call setContentView(R.layout.layoutXML);
中,然后您可以通过findViewByID检索表面视图并随意执行任何操作。