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 变量,因此 for 循环可以循环遍历所有不同的文本视图,使每个文本视图分别为 text1,然后将它们的文本设置为字符串值?

如果它不能以这种方式工作,这并不是一个真正的问题,它只是意味着要编写更多的代码行。

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

我通常会int[]在某处的代码中放入一小部分 Id。如果您有很多,请考虑以编程方式创建它们 ( layout.addView(new TextView(..)。

例如,如果您想启动 anActivity并通过 Extras 告诉它要显示哪些字符串,Bundle您可以将它们直接作为数组放置。

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

现在在里面Activity我会把ids作为一个“常量”。

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

然后同时使用 Bundle 和 id 数组,例如:

// 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 回答