2016-03-02 16 views
6

私は、投資ポートフォリオの計算を実行するAndroidアプリを理解しようとしています。ポートフォリオは、res/values/portfolio.xmlに格納されています。Resources.getIdentifier()、deftype引数の可能な値は?

enter image description here

ボタンをアプリに押すと、次のように、ポートフォリオデータが取得されます。

String portfolioName = ((TextView) findViewById(R.id.portfolioName)).getText().toString(); 
Resources res = getResources(); 
String[] data = res.getStringArray(res.getIdentifier(portfolioName, "array", this.getPackageName())); 

私はString ArrayリソースタイプのAndroidのドキュメントを見つけましたportfolio.xmlファイルの構文を説明し、name属性をgetIdentifier()の最初の引数として使用する理由を説明します。

“ファイル名は任意です。 <string-array>要素のnameがリソースIDとして使用されます。 ”

しかし、私はあなたが(それは文字列だという以外)getIdentifierdefType引数に置くことになっているかを知る方法を説明します任意のドキュメントを発見していません。提供された例では、"array"が動作しますが、それはどこから来ますか?そして、一般的に 'defType'の可能な値は?

答えて

4

getIdentifierは、指定されたリソース名のリソースのidを返します。 typeDefはResource(詳細はhereを参照してください)のタイプを指します。 resの内容はコンパイル時に解析され、この解析の結果からR.javaクラスが生成されることに注意してください。最終的にあなたが探しているのは、そのクラスで宣言されているフィールドです。内部実装はわかりませんが、arrayにresタイプを指定すると、全体ではなく

+1

のように、アンドロイドはR.arrayのみを検索します。このドキュメントは私が探していたものです。あなたが提供した追加情報を同化するためには、さらに時間が必要です。ありがとう! – yroc

+0

あなたは大歓迎です – Blackbelt

関連する問題