2010-05-31 82 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);}}