androidstdioのjavaでdrawableにある画像を配列化したいと思い以下のようにしました。 public static class tabemono{ static int[] gazou = new int[3]; {
androidstdioのjavaでdrawableにある画像を配列化したいと思い以下のようにしました。 public static class tabemono{ static int[] gazou = new int[3]; { mono[1]=R.drawable.gazou1; mono[2]=R.drawable.gazou2; mono[3]=R.drawable.gazou3; } } この後押したボタンによりImageViewが変わるようにするためにMainActivity.aの変数によって表示される画像が変わるようにしたのですが表示されません。 public void move() { ImageView imageView = findViewById(R.id.imageView_mono); imageView.setImageResource(tabemono.mono[MainActivity.a]); } 配列を使わず直接 imageView.setImageResource(R.drawable.gazou1);のようにしたら表示はされました。配列化の仕方が間違っているのでしょうか?
ベストアンサー
リソースIDの配列化、それを参照した画像表示は可能です。 しかし、 初期化タイミングが間違っています。 【問題点】 tabemono { static int[] gazou = new int[3]; { mono[1]=R.drawable.gazou1; mono[2]=R.drawable.gazou2; mono[3]=R.drawable.gazou3; } } 「gazou」が配列変数なのに mono変数に入れてるのは誤記ですか? そして、配列要素番号は0, 1, 2ですが、 1, 2, 3で参照してます。 要素番号3にアクセスしたとき、配列外参照で落ちますよ でも多分、アプリが落ちてはないですよね? なぜ落ちないかというと、この代入は実行されていないからです。つまり、配列は空のままです。 クラス内に{}のみのブロックを作ると イニシャライザといって、インスタンス生成時に呼ばれます。 なので、このクラス(tabemono)をインスタンス化(newする)タイミングで配列にデータを入れるコードになっています。 恐らくこのクラスはstaticでのみ使われる想定です?なので、配列にデータを入れるタイミングがなく、ずっと空だから画像が表示されません。 【対策】 初期化時に代入しましょう static int[] gazou = { R.drawable.gazou1 , R.drawable.gazou2 , R.drawable.gazou3 }; または 静的イニシャライザで代入しましょう static int[] gazou = new int[3]; static { // ★{}の前にstaticを付ける gazou[0]=R.drawable.gazou1; gazou[1]=R.drawable.gazou2; gazou[2]=R.drawable.gazou3; }
質問者からのお礼コメント
ありがとうございました。
お礼日時:1/20 10:41