1

Android コードのパフォーマンスと最適なアプローチについて質問があります。

私がしなければならないことはかなり単純です。int パラメータに応じて、テキスト値を文字列リソースに動的に割り当てたいのです。

今のところ大きなスイッチケースを使っています

int messagesCategory;
if(extras !=null) {
        messagesCategory = extras.getInt("category");
    }

TextView titleText;
    titleText = (TextView) findViewById(R.id.headerTitle);

switch (messagesCategory) {
    case 1: titleText.setText(R.string.TitleMessageList1); break;
    case 2: titleText.setText(R.string.TitleMessageList2); break;
    case 3: titleText.setText(R.string.TitleMessageList3); break;
    case 4: titleText.setText(R.string.TitleMessageList4); break;

    case ...: titleText.setText(R.string.TitleMessageList...); break;

    case n: titleText.setText(R.string.TitleMessageListn); break;
    default: titleText.setText("a default title");  break;
    }

このスイッチに 30 行あるとしましょう...これは機能しますが、多くの場合、これを実現するためのより良い方法があるようです。残念ながら、動的なものを R.string に割り当てることはできないようです。

私の最初の質問は次のとおりです。1) パフォーマンスに関しては、この場合、30 ケース程度で大きなスイッチを使用するのは問題ですか? 2)最善のアプローチは何ですか?

良い一日をありがとう

4

4 に答える 4

5

単純、

int[] stringIds = {R.string.TitleMessageList1, R.string.TitleMessageList2,...};

int messagesCategory;
TextView titleText = (TextView) findViewById(R.id.headerTitle);
    if(extras !=null) {
            messagesCategory = extras.getInt("category");
            if(messagesCategory  <= n)
            titleText.setText(stringIds[messagesCategory]);
            else  titleText.setText("a default title"); 
 }

これで、ケースの切り替えや比較はありません。基本的な Java と Android の基礎は、簡単で短いものになります。

生成されたファイルR.string.XXXと同様に、その値の int 配列を作成し、を使用して値を取得する必要があります。そして、それを直接に設定します..int valueR.javaint messagesCategoryTextView

于 2013-01-30T09:02:38.123 に答える
1

これを行うこともできます:

Field f = R.id.class.getField("TitleMessageList" + String.valueOf(messagesCategory));
int val = f.getInt(null);
titleText.setText(val);

すべての ID をメモリにロードする必要がなく、高速です。

楽しみ!

于 2013-01-30T09:37:00.167 に答える
0

switch case はGOTOコード内の と同等であり、パフォーマンスについて心配する必要はありません。

あなたのコードは問題ありませんが、うまくいかないかもしれませんが、機能し、効率的です。

于 2013-01-30T09:02:02.123 に答える
0
  1. case30 個のステートメントは、ループで実行したり、配列を反復処理したりすることを除いて、それほど害はないと思います。

  2. R.string が提供する整数を直接使用しないのはなぜですか? マッピングは本当に必要ですか?R.string 識別子を渡すことができます。または、パフォーマンスが本当に心配な場合は、配列でルックアップを行うことができます。

于 2013-01-30T09:03:50.950 に答える