1

HideImages()以下のような関数を作成しました。問題は、このコードを実行すると NullPointerExpection が発生することです。行をコメントアウトすると、setVisibility正常に機能します。私は何を間違っていますか?

public class MainActivity extends Activity implements SurfaceHolder.Callback {
  ImageView img_w0, img_w1, img_w2;
  public void onCreate(Bundle savedInstanceState) {
    ImageView img_w0 = (ImageView)findViewById(R.id.img0);
    ImageView img_w1 = (ImageView)findViewById(R.id.img1);
    ImageView img_w2 = (ImageView)findViewById(R.id.img2);

    HideImages();

  }
  public void HideImages() {
    img_w0.setVisibility(View.INVISIBLE);
    img_w1.setVisibility(View.INVISIBLE);
    img_w2.setVisibility(View.INVISIBLE);
}
}
4

3 に答える 3

3

ImageView のすべての参照をグローバルとして作成します。

public class MainActivity extends Activity implements SurfaceHolder.Callback {
  ImageView img_w0, img_w1, img_w2;
  public void onCreate(Bundle savedInstanceState) {
    img_w0 = (ImageView)findViewById(R.id.img0);
     img_w1 = (ImageView)findViewById(R.id.img1);
     img_w2 = (ImageView)findViewById(R.id.img2);

    HideImages();

  }
  public void HideImages() {
    img_w0.setVisibility(View.INVISIBLE);
    img_w1.setVisibility(View.INVISIBLE);
    img_w2.setVisibility(View.INVISIBLE);
}
}
于 2012-10-04T09:27:06.223 に答える
1

問題はここにあります。ImageViewオブジェクトはすでにグローバルに宣言されています。そして、再び内部的に宣言していますonCreate()

したがって、内部の宣言を削除してonCreate()実行するだけです。以下のように -

public void onCreate(Bundle savedInstanceState) {
    img_w0 = (ImageView)findViewById(R.id.img0);
    img_w1 = (ImageView)findViewById(R.id.img1);
    img_w2 = (ImageView)findViewById(R.id.img2);

}

于 2012-10-04T09:26:47.130 に答える
1

ImageViewここで宣言する理由 onCreate() メソッドの上で既に初期化していたため、これが問題になる可能性があると思います。

img_w0 = (ImageView)findViewById(R.id.img0);
img_w1 = (ImageView)findViewById(R.id.img1);
img_w2 = (ImageView)findViewById(R.id.img2);
于 2012-10-04T09:26:28.443 に答える