2012-12-22 10 views
8

strings.xmlファイルに存在する文字列のリストが必要です。Androidのstrings.xmlファイルにある文字列のリストを取得

誰もそれを得る方法を知っていますか?私が見つけた1つのことは、R.java内でidsを順番に割り当てることですが、開始IDを取得する方法は明確ではありません。

たとえば、私は以下のようにstrings.xml内に100個の文字列を持っていますので、getResources()。getString(int id)for individualを読んでみたいと思います。

<string name="app_label">Calendar</string> 
<string name="what_label">What</string> 
<string name="where_label">Where</string> 
<string name="when_label">When</string> 
<string name="timezone_label">Time zone</string> 
<string name="attendees_label">Guests</string> 
<string name="today">Today</string> 
<string name="tomorrow">Tomorrow</string> 
+0

を取得するには、getResources.getString( "your_string_name");を使用します。 –

+0

私は知っているが、私はこのメソッドを使用する場合、私はすべての文字列のリストが必要です私はすべての文字列のidsを与える必要があります100文字列がそこにある場合私はこれを100回書く必要があります –

+2

私の答えを見るhttp://stackoverflow.com/質問/ 13820645/sqlite-databas/13821330#13821330 – Luksprog

答えて

5

strings.xmlファイルからすべての文字列にアクセスする場合は、R.stringクラスで反射を使用できます。例はthis answerにあります。ドロアブルを文字列に置き換えるだけで済みます。

+0

ありがとうございました! :) –

10

res \ values \ strings.xmlファイルに文字列を次のように宣言できます。

<string-array name="vehiclescategory_array"> 

     <item>Cars</item> 
     <item>Bikes</item> 
     <item>RVs</item> 
     <item>Trucks</item> 
     <item>Other Vehicles</item> 

</string-array> 

アクティビティクラスでは、次のようにアクセスできます。

String[] categories; 

categories=getResources().getStringArray(R.array.vehiclescategory_array); 

上記のリストでは、宣言するシーケンスはすべて、アクティビティの配列に割り当てられるのと同じ方法です。 Carsがカテゴリ[0]に割り当てられると仮定します。お役に立てれば。

+0

これはいいです:)しかし、私の問題は、XMLファイル内の単一の要素として既に定義された文字列と私それらの文字列のすべてを読み取る必要があります –

+0

あなたのrefrenceのための多くの説明を追加Appu :) –

+0

あなたは文字列からidsが必要ですか?もしそうなら、getIdentifier()で試してみましたか?しかし、配列を使用しない場合は、正しく理解していれば、それぞれの文字列のIDを取得するために、アクティビティコード内のすべてのString名について言及する必要があります。 – Kanth

2

各文字列のエントリを持つ整数配列を宣言できます。私は一度色の配列のためにこれをしたので、それは同様に文字列のために動作すると思います。あなたのコード内で次に

<integer-array name="app_strings"> 
    <item>@string/app_label</item> 
    <item>@string/what_label</item> 
    <item>@string/where_label</item> 
    <item>@string/when_label</item> 
    <item>@string/timezone_label</item> 
    <item>@string/attendees_label</item> 
    <item>@string/today</item> 
    <item>@string/tomorrow</item> 
</integer-array> 

のres /値/ arrays.xml、あなたが希望の配列をループとのgetStringの引数として各値を使用します()。

int[] stringIds = getResources().getIntArray(R.array.app_strings); 
String[] strings = new String[stringIds.length]; 
for (int i = 0; i < stringIds.length; i++) { 
    strings[i] = getString(stringIds[i]); 
} 

問題は、あなたがあなたの文字列リソースを変更するたびに手動でarrays.xmlを更新する必要があるので、それは確かに理想的ではありません。

5
Field[] fields = R.string.class.getDeclaredFields(); // or Field[] fields = R.string.class.getFields(); 
String str = ""; 
for (int i =0; i < fields.length; i++) { 
    int resId = getResources().getIdentifier(fields[i].getName(), "string", getPackageName()); 
    str += fields[i].getName() + " = "; 
    if (resId != 0) { 
     str += getResources().getString(resId); 
    } 
    str += "\n"; 
} 

"str"変数の値を持つ文字列のすべてのコードを取得します。

関連する問題