動的にリソース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)
Copyright(C) 2004-2013 モバイル開発系(K) All rights reserved.
[Home]
|