動的にリソースIDを得る

リソースのIDは通常、"R.raw.message1"等のように静的に得られる。これはこれで便利なのだが、例えばmessage1、message2、message3...のようなリソースがあるとき、変数を使ってこれらを動的に取得したい場合がある。そんな時はResourcesクラスのgetIdentifierメソッドを利用できる。

アプリケーションのResourcesオブジェクトはContext(Activity)のgetResourcesメソッドで得られる。上記の"R.raw.message1"のリソースIDを得るには、getIdentifier("message1", "raw", getPackageName())のように呼べば良い。getPackageNameメソッドはJavaのいわゆる普通のパッケージ名を得るメソッドである。下記の例では"message"という固定の文字列とnumberという変数からリソース名を生成し、それに対応するリソースIDを取得している。

        button1.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                int number = 1;
                int id = getResources().getIdentifier("message" + number, "raw", getPackageName());
                Toast.makeText(getApplicationContext(), "id = " + id, Toast.LENGTH_SHORT).show();
            }
        });

あるいは、getIdentifier(getPackageName() + ":raw/message1", null, null)という形式でも良い。この場合は第1引数のみでリソース名、タイプ、及びパッケージ名のすべてを指定しており、続く第2、第3引数はnullを指定する。

                int id = getResources().getIdentifier(getPackageName() + ":raw/message" + number, null, null);

ただし、android developersのリファレンスを見るとこのgetIdentifierメソッドの使用そのものは推奨されていないようだ。

(2012/02/02)

新着情報
【iOS Objective-C, Swift Tips】画像の向きを指定して保存する(Swift)
【iOS Objective-C, Swift Tips】UIImagePickerControllerの表示を日本語にする(Swift)
【iOS Objective-C, Swift Tips】ウィンドウの階層構造を3D表示する(Swift)

Copyright(C) 2004-2013 モバイル開発系(K) All rights reserved.
[Home]