2010-05-31 87 views
8

我已经16个textViews和需要设置是这样完成的:如何迭代R.java类的id属性?

for (int i=1; i<6; i++) 
{ 
    int $RidInt = R.id.s; 
    tv[i] = (TextView)findViewById($RidInt); 
    tv[i].setTypeface(face); 
    tv[i].setClickable(true); 
    tv[i].setOnClickListener(clickListener); 
} 

我R.java文件是:

public final class R { 
    public static final class attr { 
    } 
    public static final class drawable { 
     public static final int icon=0x7f020000; 
    } 
    public static final class id { 
     public static final int s1=0x7f050000; 
     public static final int s10=0x7f050009; 
     public static final int s11=0x7f05000a; 
     public static final int s12=0x7f05000b; 
     public static final int s13=0x7f05000c; 
     public static final int s14=0x7f05000d; 
     public static final int s15=0x7f05000e; 
     public static final int s16=0x7f05000f; 
     public static final int s2=0x7f050001; 
     public static final int s3=0x7f050002; 
     public static final int s4=0x7f050003; 
     public static final int s5=0x7f050004; 
     public static final int s6=0x7f050005; 
     public static final int s7=0x7f050006; 
     public static final int s8=0x7f050007; 
     public static final int s9=0x7f050008; 
    } 
    public static final class layout { 
     public static final int main=0x7f030000; 
     public static final int toast=0x7f030001; 
    } 
    public static final class string { 
     public static final int app_name=0x7f040000; 
     public static final int s2=0x7f040001; 
    } 
} 

回答

13

类似的东西?

import java.lang.reflect.Field; 
/* ... */ 

for (int i = 1; i < 16; i++) { 
    int id = R.id.class.getField("s" + i).getInt(0); 
    tv[i] = (TextView)findViewById(id); 
    tv[i].setTypeface(face); 
    tv[i].setClickable(true); 
    tv[i].setOnClickListener(clickListener); 
} 
+0

完美!这工作。谢谢。 – 2010-05-31 06:02:42

+0

真的很好的工作。 – MKJParekh 2012-05-26 07:16:12

+0

由于某种原因,我需要添加一个try/catch块 - 但效果非常好!无论如何,以避免尝试/赶上? – Jona 2014-05-05 15:12:10

2

试试这个。

public void onCreate(Bundle savedInstanceState) { 
      super.onCreate(savedInstanceState); 

      setContentView(R.layout.main); 
      LinearLayout ll = (LinearLayout) findViewById(R.id.LinearLayout01); 
      for (int i = 0; i < ll.getChildCount(); i++) { 
       ((TextView) ll.getChildAt(i)).setText("Text View " + i); 
      } 
+0

我认为这会抛出很多CastingExpcetions,如果不是所有的孩子都是textviews – RoflcoptrException 2010-05-31 05:51:18

+0

mgpyone问“我有16个textViews,需要设置这样的事情:”。您可以将所有文本视图放置在一个线性布局中。 我只是在暗示这也是达到要求的一种方式。 – Vivart 2010-05-31 06:08:06

2

我只好包矿一个try/catch包装,不知道为什么,但我很新。

for (int counter = 1; player < 5; counter++) { 
     try {Field field = example.main.R.id.class.getField("s" + counter); 
      try {screenid = field.getInt(null);} 
      catch (IllegalAccessException e){//exceptioncodehere} 
     catch (NoSuchFieldException e) {//exception2codehere} 
     TextView SetMe = (TextView)findViewById(screenid); 
     SetMe.setText("Text" + player);}}