有没有办法使用变量更改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为text1,然后将其文本设置为字符串值?
如果它不能以这种方式工作它不是一个问题,它只是意味着要编写更多的代码行。
答案 0 :(得分: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();
答案 1 :(得分:0)
我通常只会在代码中放置一个小的int[]
Ids数组。如果您有很多,请考虑以编程方式创建它们(layout.addView(new TextView(..
)。
例如,如果您想要启动Activity
并告诉它通过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 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]);
}
}