有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java动态资源名称

我想通过for循环填充一些文本视图。 这不是一个实际的代码示例,但我希望它足以让您了解我要做的事情。 我甚至不确定这是否可能,但我希望有人找到了一种方法

    TextView dataTV0 = (TextView) v.findViewById(R.id.dataTV0);
    TextView dataTV1 = (TextView) v.findViewById(R.id.dataTV1);
    TextView dataTV2 = (TextView) v.findViewById(R.id.dataTV2);
    TextView dataTV3 = (TextView) v.findViewById(R.id.dataTV3);
    TextView dataTV4 = (TextView) v.findViewById(R.id.dataTV4);
    TextView dataTV5 = (TextView) v.findViewById(R.id.dataTV5);

    String[] data; //This is acquired from another source

 for (int i = 0; i < 6; i++){
            (String.format("dataTV%d", i).setText(data[i]);
        }

共 (3) 个答案

  1. # 1 楼答案

    我看到大多数答案都是通过程序创建的,如果你在{}中有{}和在{}中有{}存档,你可以这样做:

    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);
    
  2. # 2 楼答案

    您应该尝试将这些文本视图放入LinkedList:

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

    而不是你的循环,你可以选择:

    for(TextView t : tvs){
        t.setText("text");
    }
    
  3. # 3 楼答案

    我认为一个选择是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]);
    }