ファイル名からfindViewByIdするIDを取得する


普通、レイアウト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”に変更してください

ファイル名からfindViewByIdするIDを取得する” への1件のコメント
  1. ななし より:

    参考になりました。ありがとうございます。

ななし へ返信する コメントをキャンセル

メールアドレスが公開されることはありません。

このサイトはスパムを低減するために Akismet を使っています。コメントデータの処理方法の詳細はこちらをご覧ください