2017-03-23 1 views
1

Ich möchte eine Menge Textviews in Code (272 insgesamt) zuzuordnen:In vielen Textviews

texx1 = (TextView) findViewById(R.id.resul1); 
texx2 = (TextView) findViewById(R.id.resul2); 
texx3 = (TextView) findViewById(R.id.resul3); 
texx4 = (TextView) findViewById(R.id.resul4); 
... 
texx272 = (TextView) findViewById(R.id.resul272); 

Alle Ideen, wie ich das tun?

+0

Was versuchen Sie zu lösen? Sind die Ansichten in einem XML-Layout fixiert (feste IDs) oder dynamisch im Code erstellt? – ramden

+0

Versteh die Frage nicht. texx1 wird niemals im Layout verwendet, solange resul1 ist, wenn das beantwortet. –

Antwort

0

Die einzige Option, mit fester IDs verwenden und nicht mit ihm getippt statisch als Eigenschaften eine Liste von Textview wären Verweise auf die Ansichten wie dieses hält:

List<TextView> textviews = new ArrayList<>(); 
Resources res = getResources(); 

for (int i = 1; i <=272; i++) { 

    int id = res.getIdentifier("resul" + i, "id", getContext().getPackageName()); 
    TextView tv = (TextView) findViewById(id); 
    textviews.add(tv); 
} 

Von hier auf eine Liste zugreifen müßte Artikel, um das gewünschte Textview

TextView textViewToAccess = textViews.get(13); 
textViewToAccess.setText(...); 
0

Android hat API für den Zugriff auf einen ID-konstante dynamisch (mit Namen) abzurufen: Android, getting resource ID from string?, es sein kann, verwendet, um „Massenproduktion“ diese IDs.
Und zum Speichern von Ergebnissen kann ein Array oder eine Sammlung verwendet werden.

Auch das Schreiben von Code auf diese Weise würde Sie sicherlich zum Feind desjenigen machen, der den Code pflegen muss. Eine bessere Idee wäre, zweimal zu denken, und mit etwas besserem Design zu kommen.

0

Ich nehme an, Sie haben TextViews, alle mit separaten IDs?

Sie können einen int id durch eine Zeichenfolge wie diese erhalten ...

public static int getIdByName(String name) { 
    return getResourceIdByName(name, "id"); 
} 

public static int getResourceIdByName(String name, String type) { 
    StringBuilder s = new StringBuilder(context.getPackageName()).append(":").append(type).append("/").append(name); 
    return context.getResources().getIdentifier(s.toString(), null, null); 
} 

Also für Sie, können Sie die oben und Schleife um alle 272 Textviews und einfügen in eine List<TextView> wie diese verwenden:

List<TextView> results = new ArrayList<>(); 
for (int i = 1; i <= 272; i++) { 
    TextView textView = (TextView) getIdByName("resul" + i); 
    results.add(textView); 
} 
+0

Ist das nicht eine Kopie meiner Antwort? – ramden

+0

Ich habe vor dir geantwortet ;-) –

+0

hmm ... 20:17 vs 20:21? :) – ramden