普通、レイアウトXMLに配置したコンポーネントのIDを取得するときや、画像のリソースIDを取得するときは、
ImageView iv = (ImageView) findViewById(R.id.iv); Drawable image = getResources().getDrawable(R.drawable.image); //画像をImageViewにセット iv.setImageDrawable(image);
のように、idで取得してくるのが普通だと思います。
しかし、ここで例えば以下のような実装をするとします。
——————–
IDがiv1,iv2,iv3,・・・iv50と50個のImageViewに、
image1,image2,image3・・・image50とファイル名がつけられた50個のpng画像を貼りつける
——————–
その場合、下記のように50個分のソースを書くのは大変です。
ImageView iv1 = (ImageView) findViewById(R.id.iv1); ImageView iv2 = (ImageView) findViewById(R.id.iv2); ImageView iv3 = (ImageView) findViewById(R.id.iv3); . . . ImageView iv50 = (ImageView) findViewById(R.id.iv50); Drawable image1 = getResources().getDrawable(R.drawable.image1); Drawable image2 = getResources().getDrawable(R.drawable.image2); Drawable image3 = getResources().getDrawable(R.drawable.image3); . . . Drawable image50 = getResources().getDrawable(R.drawable.image50); //画像をImageViewにセット iv1.setImageDrawable(image1); iv2.setImageDrawable(image2); iv3.setImageDrawable(image3); . . . iv50.setImageDrawable(image50);
なので、ファイル名からIDを取得しましょう!
基本的な書式は、「getResources().getIdentifier(“ファイル名”, “id”, getPackageName());」です。
for (int i = 0; i < 50; i++) { //ImageViewのIDを文字列から取得する int viewId = getResources().getIdentifier("iv" + (i + 1), "id", getPackageName()); ImageView iv = (ImageView)findViewById(viewId); //文字列から画像のdrawableのIDを取得する int imageId = getResources().getIdentifier("image" + (i + 1), "drawable", getPackageName()); //画像をImageViewにセットする iv.setImageResource(imageId); }
リソースIDを取得するときは、第二引数を”id”から”drawable”に変更してください
参考になりました。ありがとうございます。