是否可以动态更改变量名称。我的意思是我有4个带有名称的textViews:textView1,textView2,textView3,textView4
我在for循环中添加一个计数我想做这样的事情:
for (int i; i<count; i++)
{
textView+(i).setText(Count)
//textView1.setText(Count);
//textView2.setText(Count);
//textView3.setText(Count);
//textView4.setText(Count);
count++
}
我如何实现这一目标?这可能吗?
谢谢!
答案 0 :(得分:2)
在运行时无法更改变量的名称。变量是您用作开发人员的工具,用于告诉“计算机”您希望它做什么。这个问题与询问您是否可以编写代码,无需在每个语句的末尾添加分号(;
)一样无效。变量名称只是您调用某些元素的名称。这就是Java的工作原理。
话虽这么说,你要做的是通过使用一个简单的数组并迭代它来实现的。这是你如何做到的:
TextView[] textViews = new TextView[] { textView1, textView2, textView3, textView4 };
for (int i = 0; i < textViews.length; i++)
{
textViews[i].setText("some text");
}
在这里,您创建一个名为“textViews
”的新变量,它是TextView
类型数组。在其中,您有4个对其他TextViews
的引用,每个引用都由您之前提供的变量名称定义。
修改强>
如果在XML布局文件中定义了TextViews
,则可以在创建数组之前初始化textView1,textView2,..变量,或者可以通过调用{{1}直接初始化数组像这样:
findViewById
答案 1 :(得分:1)
基本上你想要的不是最佳实践
但是如果你可以通过Reflection
String textViewName = "textView";
String methodName = "setText";
Class activityClass = this.getClass();
for(int i = 0; i < count; i++) {
try {
Field field = activityClass.getField(textViewName + i);
if(field != null){
Method method = field.getClass().getMethod(methodName, String.class);
method.invoke(field, Count);
}
} catch (NoSuchFieldException e) {
e.printStackTrace();
} catch (NoSuchMethodException e) {
e.printStackTrace();
}
}
答案 2 :(得分:0)
不可能。这就是java的工作方式,你可以称之为语法规则
上面的Instaed你可以做
选择
Collection
和iterate
。你不能够懒惰 初始化变量名至少!