2016-09-15 5 views
1

私はいくつかの描画可能なイメージ(fx。私はimage_1、image_2という名前のイメージがいくつかあります)をヘッダイメージとして循環させています。私のために利用可能なイメージの数をハードコードし、0からこの数字までランダムなインデックスを生成すると、イメージはランダムにロードされます。Android:Count string and drawables

mHeaderBackgroundImagesCountは最終的なもの:として、ハード何かをコーディングすることは、通常は正しいプログラミングに移動するための方法ではありません

private int getHeaderBackground() { 
    // Random index between 0 and mHeaderBackgroundImagesCount 
    Random rand = new Random(); 
    int index = rand.nextInt(mHeaderBackgroundImagesCount) + 1; 

    return getResources() 
      .getIdentifier("image_" + index, "drawable", getPackageName()); 
} 

、従って私は動的に私が持っているどのように多くの「image_X」ドローアブルを見つけると、それを設定したいですmHeaderBackgroundImagesCount

strings.xmlリソースファイルの文字列も同じようにしたいと思います。すべてのページロード時にいくつかの文字列も循環しています。

ソリューションこのアップデートは、以下のラリットPoptaniの提案に触発され

を更新します。構文の修正と最適化が含まれており、動作することがテストされています。

private int countResources(String prefix, String type) { 
    long id = -1; 
    int count = -1; 
    while (id != 0) { 
     count++; 
     id = getResources().getIdentifier(prefix + (count + 1), 
       type, getPackageName()); 
    } 

    return count; 
} 

System.out.println("Drawables counted: " + countResources("image_", "drawable")); 
System.out.println("Strings counted: " + countResources("strTitle_", "string")); 

注:このメソッドは、リソースがインデックス1で始まるカウントと仮定し、したがって故障カウントを得ID = 0の最初の機会に終了するため等image_1image_2<hole>image_4ようないかなる指標穴を有していません。

答えて

1

あなたは

 int count = 0; 
     int RANDOM_COUNT = 10; //which is more than your drawable count 
     for (int i = 1; i < RANDOM_COUNT; i++){ 
      int id = getResources().getIdentifier("ic_launcher_"+i, 
                "drawable", getPackageName()); 
      if(id != 0){ 
       count = + count; 
      } 
      else{ 
       break; 
      } 
     } 
     Log.e(TAG, "This is your final count of drawable with image_x - "+ count); 

ドロワブルのリストは、IMAGE_1の順にIMAGE_2される...というように、あなたは、論理の下に適用できることを確認している場合は、このロジックを使用image_xという名前のドロアブルがないため、IDは0になり、ループを解除することができます

+0

上記の元の投稿に改訂された手順を掲載しました。これはRANDOM_COUNTの必要性を取り除きます。 – Ambran

+0

@Ambranは良いと思うので、最終的にはあなたのコードで最後に使用することを選択しましたか? –

+0

'while'ループを使用すると、' for'ループのような特定の上限(RANDOM_COUNT)のインデックスを宣言する必要がなくなるため、私は上記の修正版を使用しました。アイデアは同じなので、ありがとう。 – Ambran

1

リソースまたはドロワーブリングの数を動的に取得できるかどうかはわかりません。

この問題を回避する方法は、文字列配列をstrings.xmlのリソースとして使用することです。

<resources> 
<string-array name="foo_array"> 
    <item>abc1</item> 
    <item>abc2</item> 
    <item>abc3</item> 
</string-array> 

int count = getResources().getStringArray(R.array.foo_array).length; 
+0

私は助けてくれるとうれしいです。 – qantik

関連する問題