1

Android に手を出し始めたばかりで、文字列を Java にハード コードするのではなく、文字列リソース フォルダーに配置するように言われました。

ハッシュマップでキーと値の両方が文字列である既存のコードがあります。文字列をxmlに入れ、Java部分から完全に取り出すにはどうすればよいですか?

文字列リソースフォルダーに文字列を作成するだけですか

<string name="hello">Hello.world</string>

hello がキーで、 world が値で、. 区切りとして?

うまくいけば、私は自分自身を正しく説明しました

4

4 に答える 4

3

res フォルダーで定義できるリソースの種類は他にも多数あります。利用可能なものはここここで見ることができます。あなたの目的のために、1つのアプローチは res/values/arrays.xml で配列を定義することです:

<resources> 
    <string-array name="hashmap"> 
        <item>key1</item> 
        <item>value1</item> 
        <item>key2</item> 
        <item>value2</item> 
        <item>key3</item> 
        <item>value3</item> 
    </string-array> 
</resources> 

そしてコードで:

Resources res = this.getResources();
String[] hashmapData = res.getStringArray(R.array.hashmap);
HashMap<String, String> map = new HashMap<String, String>(); 
for(int i=0; i<hashmapData.length; i=i+2) { 
    map.put(hashmapData[i], hashmapData[i+1]);         
} 
于 2012-10-23T14:30:00.210 に答える
1

それは本当にあなたがそれを何のために使用しているかに依存します. 「XML にのみ文字列を含める」という定説は素晴らしいものですが、実際にはユーザー出力に使用している文字列に適用されるため、たとえばアプリを翻訳したい場合に簡単に変更できます。内部の仕組みにキーと値のペアを使用している場合は、その必要はありません。

出力文字列に関係する場合は、はい、これは良い方法です。キーと値を 2 つの XML ノードに分割することを検討することもできます。これは、それらをどう処理するかによって異なります。

しかし、一般的には、はい、これがその方法です。

于 2012-10-23T14:21:14.677 に答える
0

正しい。アプリに文字列をハード コーディングしないでください。これは、アプリでローカリゼーション (複数の言語) を非常に簡単にサポートできるようにするためです。文字列はすべて入る必要が/res/values/strings.xmlあり、スペイン語をサポートしたい場合は、それらの文字列 (同じname=値を持つ) が入り/res/values-es/strings.xmlます。次に、xml でこれらの文字列にアクセスするには、単に使用@string/helloし、Java では を使用しますgetString(R.string.hello)。詳細については、次のリンクを参照してください。

于 2012-10-23T14:22:44.340 に答える
0

キーと値のペアは公式にサポートされていないため、実際には 3 つのオプションがあります。

  1. 既に使用したアプローチがありますが、最初に、文字列の代わりに文字列配列を使用することをお勧めします。このようにして、ハッシュマップを 1 か所に保持できます。文字列を分割する際のリスクを軽減するため、ピリオドの代わりにランダムな Unicode 値を使用することをお勧めします。

  2. 2 つの文字列配列があります。最初の配列にはキーが含まれ、2 番目の配列には値が含まれます。このアプローチは一般的に使用されますが、結合/編集が両方の文字列配列に反映されるようにすることについて心配する必要があります。

  3. これは番号 2 に基づいています。キーと値のペアの文字列配列と、配列を含む配列があります。"hashmap" をacquireTypedArray()で取得し、for ループなどで TypedArray.getTextArray() を使用して個々の String 配列を返します。これにより、キーと値の結合が可能になります。

    <string-array name="hello_world"> <item>こんにちは</item> <item>World</item> </string-array>

    <array name="hashmap"> <item>@array/hello_world</item> </array

(ひどいフォーマットは無視してください。stackoverflow は xml にうまく対応していないようです)

于 2012-10-23T14:30:55.867 に答える