0

さて、アプリのコードを簡潔にしようとしています。それは正常に動作します。私は少し OCD であり、パフォーマンスを改善し続けたいと考えています。

問題のコードは次のようになります。

switch(ressound){
            case R.id.button40:
            ressound = R.raw.sound40;
            soundname = (this.getString(R.string.app_name)) + " - " + (this.getString(R.string.quote40));
            break;
            }
               switch(ressound){
                case R.id.button900:
                ressound = R.raw.sound900;
                soundname = (this.getString(R.string.app_name)) + " - " + (this.getString(R.string.quote900));
                break;
                }
               switch(ressound){
            case R.id.button901:
            ressound = R.raw.sound901;
            soundname = (this.getString(R.string.app_name)) + " - " + (this.getString(R.string.quote901));
            break;
            }

これは響板アプリであり、これはその機能として保存に関するものです。これらの複数のステートメントを簡潔にする方法はありますか (一部の画面には 40 以上のサウンドがあります)。ループを使用することは明らかな選択のように見えますが、周りを見回すと、case ステートメントは明らかに変数ではなく静的でなければなりません。

編集:実際の関数ヘッダーを含めるのを忘れました:

        public boolean function1(int ressound){  

              String soundname = "";
4

2 に答える 2

0

ループを使用して switch-case ステートメントを削除する方法があります。メソッドを使用しResources#getIdentifierます。リソースに連番 ("sound_filename_1"、"sound_filename_2" など) を付けると仮定すると、次のようなコードを記述できます。

private static ArrayList<Integer> findSoundResourceIds(Resources res) {
    ArrayList<Integer> resIds = new ArrayList<Integer>();

    int i = 1;
    do {
        int resId = res.getIdentifier("sound_filename_"+i, "raw", getPackage().getName());
        if (resId == 0) {
            break;
        }
        resIds.add(resId);
        i++;
    } while (true);

    return resIds;
}
于 2013-05-31T05:16:34.263 に答える