0

私の活動では、いくつかの見解とがあり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

説明してください。

4

1 に答える 1

5

電話する必要があるため

setContentView(R.layout.layoutXML); 

あなたが電話する前にfindViewById(R.id.viewID)。これが、id による findview が nul を返す理由であり、おそらく surfaceView.getHolder を呼び出しているときに nullPointerException を取得します。

推奨される解決策は、任意のレイアウト内に surfaceView を持つ必要がある layout.xml ファイルを作成することです。

アクティビティの oncreate 呼び出し setContentView(R.layout.layoutXML);で、この後、findViewByID でサーフェス ビューを取得し、それを使って好きなことを行うことができます。

于 2012-07-15T06:30:26.000 に答える