2017-06-01 6 views
0

Androidのリソースを使用していますが、私はstrings.xmlファイルから、 「メニュー」という言葉は、このすべてが複数のセクションの翻訳を管理するためのものです。Android - 文字列リソースから、名前に2つ以上の似たような単語を含むすべての要素を取得する方法

私のXMLは、この

<resources> 
<string name="app_name">MyApp</string> 
<string name="usage_analytics">Show Analytics</string> 
<string name="option_resume">Resume</string> 
<string name="option_analisys">Analysis</string> 
<string name="option_categories">Categories</string> 
<string name="option_settings">Settings</string> 

であり、このために私は自分の名前に「オプション」という単語を含むすべての要素を取得したいです。私の例では、私はoption_resume、option_analysis、option_categories、option_settingsを取得したい

この場合、私はGetString(R.string.option_resume)、GetString(R.string.option_analisys)、GetString (R.string.option_categories)、GetString(R.string.option_settings)など

しかし、この場合は、決定された単語と文字列配列リソースを持たないすべてのアイテムを動的に取得する必要があります。

これはどういう考えですか?

答えて

-1
private String getData(String suffix){ 

     String data = "option" + suffix; 

     String getStringData = this.getResources().getString(
       this.getResources().getIdentifier(data, Const.STRING, 
         this.getPackageName())); 

     return getStringData ; 
    } 

この関数を呼び出すと、特定の文字列が取得されます。そしてもしあなたが文字列のリストを必要とするならば、ループで使うことができます。

+0

詳しくは**、**これがどのように質問に答えるか説明してください。 OPは、OPが見つけようとしているものである**のような 'lookingFor'の値を**知りません。 – CommonsWare

+0

リストや配列は返されません。彼はそれに "オプション"を持つすべての文字列を探したい。 – Prexx

+0

Ans。今すぐご確認ください。 –

0

しかし、この場合のために、私はそれがdinamicallyあなたはそれを動的に行う必要はありませんdeterminated単語

を持っているすべてのアイテムを取得するようにする必要があります。リソースはコンパイル時に認識されます。新しいリソースのセットは、新しいプレフィックスを持つあなたのアプリに魔法のように表示されません。文字列配列のリソース

なし

string-arrayリソースがそれを行うための賢明な方法だろう。なぜあなたはそれを使用したくないのか、私は確信していません。実行時にoptions文字列配列は、あなたに必要な文字列を与える要求し、その後

<string-array name="options"> 
    <string>@string/option_resume</string> 
    <string>@string/option_analisys</string> 
    <string>@string/option_categories</string> 
    <string>@string/option_settings</string> 
</string-array> 

:あなたは上からstrings.xmlを既存考えると、とarrays.xmlを持っています。

arrays.xmlファイルを手動で管理している場合は、ビルドの一部としてコードを生成するためのコードを書き留めてください(カスタムGradleタスク、カスタムGradleプラグインなど)。

、自分の名前を見つけ、あなたのアプリのRクラスのすべてのR.stringフィールドを反復処理するJavaリフレクションを使用しているものの一致を見、それに対応する文字列値を取得するためにgetString()を使用することですこれを行うのが遅いとずさんな方法。

+0

これは答え、ありがとうございました。そして、あなたが言うように、この場合、配列リソース上に特定の文字列を参照することができます。それは私が参照していないので、私のエラーでした。 そして、私はすべてのリソースからループをとってそれをとるのは間違っていました。 –

1

私は@CommonsWare

String[] optionsArray = ctx.getResources().getStringArray(R.array.option_strings); 

と私は私が探していた行動をした、ことを使用しての助けを借りて解決策を見つけました。

関連する問題