动态资源名称

时间:2016-06-02 17:53:22

标签: java android

我想通过for循环填充一些TextView。 这不是一个真正的代码示例,但我希望它足以让您了解我正在尝试做什么。 我甚至不确定这是可能的,但我希望有人找到了办法。

data-

5 个答案:

答案 0 :(得分:6)

我认为一个选项是Resources.getIdentifier()

for (int i = 0; i < 6; i++){
    TextView textView = (TextView) findViewById( getResources().getIdentifier(String.format("dataTV%d", i), "id", getPackageName() ) )
    if(textView != null)
        textView.setText(data[i]);
}

<强>更新

要避免许多功能调用:

TextView textView;
Resources rresources = getResources();
String packageName = getPackageName();

for (int i = 0; i < 6; i++){
    textView = (TextView) findViewById( resources.getIdentifier(String.format("dataTV%d", i), "id", packageName ) )
    if(textView != null)
        textView.setText(data[i]);
}

答案 1 :(得分:2)

您应该尝试将这些TextView放在LinkedList中:

List<TextView> tvs;
tvs = new LinkedList();
tvs.add(new TextView(this));
...

而不是你的循环你可以去:

for(TextView t : tvs){
    t.setText("text");
}

答案 2 :(得分:1)

您可以通过实际创建TextView来实现此目的。

for (int i = 0; i < 6; i++){
    TextView textView = new TextView(this);
         textView.setText(data[i]);
}

答案 3 :(得分:1)

我看到大多数答案是以TextView方式编制的,如果TextView中有xml layoutR.id中存档Enums,则可以这样做:

enum drw {
  tv0(R.id.dataTV0),
  tv1(R.id.dataTV1)
  //and more

  private int drawable;
  drw(int i){
    this.drawable = i;
  }

  public int getdrawable(){
     return drawable;
  }

}

现在循环播放

       Map<Integer, TextView> map = new HashMap<Integer, TextView>();

       for (drw d : drw.values()) 
          map.put(d.getdrawable(), (TextView) v.findViewById(d.getdrawable()));

       TextView myPet = dogMap.get(drw.tv0.getdrawable);

答案 4 :(得分:0)

你要么必须使用reflection来使用字符串来访问textview对象。或者将所有单独的文本视图也转换为数组(这是有意义的,因为它们使用相同的名称编号)并像任何其他数组一样访问它们