2012-09-12 17 views
14

Androidライブラリ(com.appocaliptic.quizknife.core)を使用するAndroidプロジェクト(com.appocaliptic.quizknife.app)があります。Android - getIdentifierは常に0を返します(library + application)

私がやろうとしていることは、図書館である画像のリソースIDを取得することです。画像へのパスはです。res/drawable-xhdpi/fr_200_133.png

ただし、すべてgetIdentifierの結果は0です。問題はどこですか?

resId = getResources().getIdentifier("fr_200_133", "drawable", "com.appocaliptic.quizknife.core"); 
resId = getResources().getIdentifier("com.appocaliptic.quizknife.core:drawable/"+"fr_200_133", null, null); 
resId = getResources().getIdentifier("drawable/fr_200_133", null, "com.appocaliptic.quizknife.core"); 

編集:

のAch、およびR.javaに描画可能とcorensponding属性があります。

+0

これをテストしているシステムで、解像度がxhdpiの画面がありますか? – Squonk

+1

@Squonk - それはID自体を取得することに関係していません。 idに関連付けられているドロウアブルを取得するときだけです。さらに、描画可能なリソースの場合、システムは[best match](http://developer.android.com/guide/topics/resources/providing-resources.html#BestMatch)を見つけるので、xhdpiリソースを使用しますスケーリング)ldpiデバイスでも。 –

+0

@TedHopp:はい、合意しました - 私はdrawableリソースのための最良のマッチを忘れていました。 – Squonk

答えて

26

ライブラリパッケージ名を使用しないでください。代わりにこれを試してみてください:

resId = getResources().getIdentifier("fr_200_133", "drawable", getPackageName()); 

(またはgetContext().getPackageName()これはビューで実行している場合)。

+0

うわー、それはO_oで動作します。ありがとう - btw - この情報のソースですか?私が見つけたすべてのリソースは、Stringパッケージ名を使用することを提案していました。どうも。 – bluszcz

+2

@bluszcz - 私はどこかの例からそのイディオムを取り上げたと思います。キーは、ライブラリのパッケージ名(実際にはアプリケーションを作成するときに消えます)ではなく、アプリケーションのパッケージ名(マニフェストにリストされている)を使用する必要があることです。 –

+0

私は返信とともにあなたのコメントを投稿すべきだと信じています - これは非常に重要な情報です;) – bluszcz

27

私は同じ問題に直面:「getIdentifier結果0」をし、私はR.でそれとして名前が一致する画像の拡張子(* .JPG、* .JPEG、...など)を除去することによって、それを解決Javaのファイル

10

私は同じエラーを得ていたと働いていた唯一のことは、別の方法でそれについてつもりだった:

resourceId = R.drawable.class.getField("fr_200_133").getInt(null); 
1

私は同様の問題がありました。 Hussam Otriが言及しているのと同じように解決することができます。例:

//This doesn't work 
context.getResources().getIdentifier("audio_1.mp3", "raw", this.getPackageName()); 

//This works (strip off the file extension) 
context.getResources().getIdentifier("audio_1", "raw", this.getPackageName()); 
関連する問題