动态更改android中的变量TextView id

时间:2015-06-16 10:58:30

标签: android

是否可以动态更改变量名称。我的意思是我有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++
}

我如何实现这一目标?这可能吗?

谢谢!

3 个答案:

答案 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你可以做

  

选择Collectioniterate。你不能够懒惰   初始化变量名至少!