0

変数を使用して Android マニフェストの ID への参照を変更する方法はありますか?

次のように:

for(int counter6=1;counter6 <= 12; counter6++)
                value = bundle.getString("value"+counter6);
                TextView text1 = (TextView) findViewById(R.id.textView+counter6);
                text1.setText(value);

ID ディレクトリで counter6 変数を使用することは可能ですか?

このように機能しない場合、それは実際には問題ではありません。それは、記述するコードの行数が増えることを意味します。

4

2 に答える 2

0

id でループを作成し、生成時にインクリメントすることは実際にはできませんが、参照の配列を作成し、その配列を取得して各 TextView を見つけてテキストを更新することはできます。

<array name="array_text_views">
       <item>@id/text_view_1</item>
       <item>@id/text_view_2</item>
       <item>@id/text_view_3</item>
<array>

あなたのコードでは、そのようなもの:

ArrayList<TextView> myTextViews = new ArrayList<TextView>();
TypedArray ar = context.getResources().obtainTypedArray(R.array.array_text_views);
int len = ar.length();
for (int i = 0; i < len; i++){
    myTextViews.add(findById(ar[i]));
} 
ar.recycle(); 
于 2013-09-12T15:25:14.567 に答える
0

私は通常、ID の小さなint[]配列をコードのどこかに入れます。それらが多数ある場合は、プログラムで作成することを検討してください ( layout.addView(new TextView(..)。

たとえば、 を開始しActivityて、エクストラを介して表示する文字列を指定するBundle場合は、それらを配列として直接配置できます。

void startOther(String[] texts) {
    Intent i = new Intent( /* ... */);
    i.putExtra("texts", texts);
    // start via intent
}

その中ActivityにIDを「定数」として入れます。

// hardcoded array of R.ids
private static final int[] TEXT_IDS = {
    R.id.text1,
    R.id.text2,
    // ...
};

次に、たとえば次のように Bundle と id Array の両方を使用します。

// a List of TextViews used within this Activity instance
private List<TextView> mTextViews = new ArrayList<TextView>(TEXT_IDS.length);

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);

    setContentView(R.layout.something);

    // find all TextViews & add them to the List
    for (int id : TEXT_IDS) {
        mTextViews.add((TextView)findViewById(id));
    }

    // set their values based on Bundle
    String[] stringArray = savedInstanceState.getStringArray("texts");
    for (int i = 0; i < mTextViews.size() && i < stringArray.length; i++) {
        mTextViews.get(i).setText(stringArray[i]);
    }
}
于 2013-09-12T17:50:19.450 に答える