例如我有10个Textiews,名称为text1到text11。我把它们投下如下:
TextView text1=(TextView) findViewByid(R.id.textview1);
为遗体做这件事。现在在某个地方我想调用它们并在for循环中为它们设置文本,例如当i = 1 text1.settext完成时,当i = 2 text2.settext完成时......如下所示:
for(int i=1;i<=11;i++){
text(i).SetText("some text");
}
怎么办?
感谢
答案 0 :(得分:2)
尝试使用文字视图填充ArrayList
。
ArrayList<TextView> myTextViews = new ArrayList<TextView>();
myTextViews.Add((TextView) findViewByid(R.id.textview1));
myTextViews.Add((TextView) findViewByid(R.id.textview2));
.
.
.
for(int i=1;i<=11;i++){
myTextViews.get(i).SetText("some text");
}
答案 1 :(得分:2)
另一种方法是使用java生成文本视图:
LinearLayout ll = (LinearLayout) findViewById(R.id.llexample);
for(int i=1;i<=11;i++){
TextView tv = new TextView(this); //create Text View
tv.setId(i); //then set the id to i
ll.addView(tv); //add TV to example Layout
}
然后当你想要检索它们时,只需执行另一个for循环:
for(int i=1;i<=11;i++){
TextView t = (TextView) findViewById(i); //get the TV by the id we set earlier
String text = t.getText().toString(); //get the text then to string it.
}
答案 2 :(得分:1)
只需使用数组来保存TextViews:
TextView[] text = {(TextView) findViewByid(R.id.textview1), ...}
然后在循环中使用它:
for(int i=1;i<=11;i++){
text[i].SetText("some text");
}
答案 3 :(得分:0)
使用ButterKnife库:
@Bind({ R.id.first_name, R.id.middle_name, R.id.last_name })
List<EditText> nameViews;
然后你可以通过这样设置你自己的逻辑
static final ButterKnife.Action<View> DISABLE = new ButterKnife.Action<View>() {
@Override public void apply(View view, int index) {
view.setEnabled(false);
}
};
ButterKnife.apply(nameViews, DISABLE);
答案 4 :(得分:0)
您可以使用此方法获取资源ID的值:
public static int getResourceId(String pVariableName, String pResourcename, String pPackageName) {
try {
return getResources().getIdentifier(pVariableName, pResourcename, pPackageName);
} catch (Exception e) {
return -1;
}
}
然后你的代码看起来像:
for(int i=1;i<=11;i++){
TextView textView = (TextView)findViewById(getResourceId("textview" + i, "id", getPackageName());
textView.setText("some text");
}
值得注意的是,这不是一个真正推荐的做法,因为它容易出错。你真的不知道&#34; textview1&#34;如果您更改了该名称,则可能会失败。如果你能给我一些关于你的用例的更多信息,我可以给你一个更优雅的解决方案。
答案 5 :(得分:0)
我说像大家一样的阵列,只有一个转折。
int ids[] ={R.id.text1, R.id.text2, ...};
TextView views[] = new TextView[ids.length];
int i=0;
for(int id : ids) {
views[i++] = (TextView)findViewById(id);
}
将ID保存在数组中可以轻松查找视图,而不是复制粘贴大量代码。
答案 6 :(得分:0)
我还没有测试过它。但你可以试试这样的东西
public setAllText() {
int[] textViews = { R.id.text1, R.id.text2, R.id.text3, R.id.text4 };
setTextForViews(textViews,"some text");
}
private void setTextForViews(int[] textViews, String textString) {
for (int i = 0; i < textViews.length; i++) {
TextView text = (TextView) getActivity().findViewById(textViews[i]);
text.setText(textString);
}
}