2010-05-31 8 views
8

I 16 Textviews haben und brauchen etwas zu setzen, wie dies getan: Wie durchläuft ich die ID-Eigenschaften der R.java-Klasse?

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); 
} 

meine R.java Datei ist

:

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; 
    } 
} 

Antwort

13

So etwas wie das?

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

Perfekt! Das hat funktioniert. Vielen Dank. –

+0

Wirklich schöne Arbeit. !! – MKJParekh

+0

aus irgendeinem Grund muss ich einen Versuch/catch-Block hinzufügen - aber funktioniert wunderbar! Wie auch immer, um den Versuch/Fang zu vermeiden? – Jona

2

versuchen Sie dies.

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

Ich denke, das wird eine Menge von CastingExpcetions werfen, wenn nicht alle Kinder Textviews sind – RoflcoptrException

+0

mgpyone fragte: "Ich habe 16 textViews und muss etwas wie folgt getan:". Sie können alle Textansichten in einem linearen Layout platzieren. und ich gebe nur einen Hinweis, dass dies auch ein Weg ist, um die Anforderung zu erfüllen. – Vivart

2

Ich musste meine in einem Versuch/fangen Wrapper, nicht sicher, warum, aber ich bin sehr neu.

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);}} 
Verwandte Themen