2016-07-15 3 views
2

I Textviews wollen Texte innerhalb for-Schleife in Android Studio, so etwas ändern:Textviews Textänderung in einer for-Schleife

für i = 0 ------------> textView0 set Text "Default"

für i = 1 ------------> textView1 Text "Default" gesetzt

für i = 2 ---------- -> textView2 set text "Default"

Ist das möglich? Ich weiß nicht, wie man die TextView ID innerhalb der Schleife nach "i" -Wert ändern kann, kann mir jemand helfen?

Hier ist meine XML:

<TextView 
    android:layout_width="match_parent" 
    android:layout_height="wrap_content" 
    android:textAppearance="?android:attr/textAppearanceSmall" 
    android:text="--------------" 
    android:id="@+id/textView0" 
    android:layout_marginLeft="16dp" 
    android:layout_gravity="center_horizontal" 
    android:textSize="13dp" /> 

<TextView 
    android:layout_width="match_parent" 
    android:layout_height="wrap_content" 
    android:textAppearance="?android:attr/textAppearanceSmall" 
    android:text="--------------" 
    android:id="@+id/textView1" 
    android:layout_gravity="center_horizontal" 
    android:layout_marginLeft="16dp" 
    android:textSize="13dp" /> 

<TextView 
    android:layout_width="match_parent" 
    android:layout_height="wrap_content" 
    android:textAppearance="?android:attr/textAppearanceSmall" 
    android:text="--------------" 
    android:id="@+id/textView2" 
    android:layout_gravity="center_horizontal" 
    android:layout_marginLeft="16dp" 
    android:textSize="13dp" /> 
+0

Sie eine Reihe von Textview –

+0

ja Objekte einrichten können, ist es ziemlich möglich ist. Sie können in die untergeordneten Ansichten des übergeordneten TextView-Objekts eine Schleife einfügen. Bitte zeigen Sie Ihre XML, so dass wir sehen könnten, ob das hier der Fall ist. –

+0

Kasse meine Lösung @Tymek T. –

Antwort

5

Leistung weise guter Ansatz.

int[] textViews = {R.id.textView1, R.id.textView2, R.id.textView3}; 
    String[] messages = {"one", "two", "three"}; 

    for (int i = 0; i < 3; i++) { 
      TextView tv = (TextView) findViewById(textViews[i]); 
      tv.setText(messages[i]); 
     } 
+0

Vielen Dank !!! –

0

Sie könnten eine Etiketten-Sammlung als auch müssen Etiketten Form holen.

List<String> labels = new ArrayList<>(); 
labels.add("Default 1"); 
labels.add("Default 2"); 
labels.add("Default 3"); 

int[] textViewIds = new int[3]; 
textViewIds[0] = R.id.text_view_a; 
textViewIds[1] = R.id.text_view_b; 
textViewIds[2] = R.id.text_view_c; 

for (int i = 0; i < textViewIds.length; i++) { 
    TextView tv = (TextView) findViewById(textViewIds[i]); 
    tv.setText(labels.get(i)); 
} 
0

Nun, wenn Sie alle Textviews auf der gleichen Hierarchieebene haben, wie Sie in Ihrem xml haben, können Sie diese Lösung versuchen:

Wickeln Sie die ganze Sache in einem Elternteil Layout, sagen wir ein RelativLayout. Dann Schleife durch:

int numberOfTextViews = layout.getChildCount(); 
for(int i = 0; i < numberOfTextViews; i++) { 
    ((TextView)(afterSendingMail.getChildAt(i))).setText("Default"); 
} 
0

Es gibt einen anderen besseren Ansatz Layout, ziehbar und id Ressourcen-ID in android

String[] messages = {"one", "two", "three"}; 

    for (int i = 0; i < 3; i++) { 
     TextView tv = (TextView) findViewById(getResources().getIdentifier("textView" + i+1, "id", getPackageName())); 
     tv.setText(messages[i]); 
    } 

Es liest id zur Laufzeit zu lesen. Vielleicht haben Sie 100 ids, dann gibt es keine Notwendigkeit, diese ID in einem Array zu speichern.

Hinweis

Und verwenden getActivity() mit getResources() und getPackageName() innen Fragment. Einzelheiten haben einen Blick auf this und this

Verwandte Themen