2010-10-14 18 views
8

Ehi lì. La mia app userà una serie di 64 ImageButtons (8x8), e sono già tutti dichiarati nel mio layout XML con nomi come one1, two5, eight8, ecc. Invece di dichiararli singolarmente nel mio Java ho pensato che potrebbe essere intelligente per dichiararli tutti in alcuni loop. HoMatrice di ImageButtons, assegna R.view.id da una variabile

ImageButton musicGrid[][] = new ImageButton [8][8]; 

Poi ho la mia cicli for innestati che in fondo creano una stringa che sarà al posto di R.id.whatever. E 'solo l'ultima riga nei miei loop, che dovrebbe fare l'assegnazione. Quale sarebbe la sintassi corretta per quello, o non è nemmeno possibile farlo (e se sì, quanto sarebbe meglio gestire una griglia a 64 pulsanti?). Grazie!

for (int i = 0; i < 8; i++) { 
     for (int j = 0; j < 8; j++) { 
      String btnID = "R.id."; 
      switch(i) { 
      case 0: btnID.concat("one"); break; 
      case 1: btnID.concat("two"); break; 
      case 2: btnID.concat("three"); break; 
      case 3: btnID.concat("four"); break; 
      case 4: btnID.concat("five"); break; 
      case 5: btnID.concat("six"); break; 
      case 6: btnID.concat("seven"); break; 
      case 7: btnID.concat("eight"); break; 
      } 
      switch(j) { 
      case 0: btnID.concat("1"); break; 
      case 1: btnID.concat("2"); break; 
      case 2: btnID.concat("3"); break; 
      case 3: btnID.concat("4"); break; 
      case 4: btnID.concat("5"); break; 
      case 5: btnID.concat("6"); break; 
      case 6: btnID.concat("7"); break; 
      case 7: btnID.concat("8"); break; 
      } 
      musicGrid[i][j] = (ImageButton) findViewById(btnID); 
     } 
    } 
+2

L'aggiunta di 64 pulsanti a un file XML è probabilmente un approccio errato. Con layout del genere, perché non creare una vista in Java e farlo tutto in modo programmatico? – Falmarri

risposta

8

mi piace AndrewKS 'for, è più elegante. Tieni presente che lo findViewById riceve un numero intero anziché una stringa. Quindi si dovrà fare qualcosa di simile:

int resID = getResources().getIdentifier(btnID, "drawable", "com.your.package"); 
musicGrid[i][j] = (ImageButton) findViewById(resID); 
+0

Oh, sembra esattamente quello di cui ho bisogno. Ti farò sapere se funziona. Grazie mille. – Nick

2

Se non hai già hardcode i pulsanti nella xml, avrei detto di farlo a livello di codice con un ViewInflater, ma dal momento che avete fatto qui è il codice:

String[] number_as_word = ["one", "two", "three", "four", "five", "six", "seven", "eight"]; 
for (int i = 0; i < 8; i++) { 
    for (int j = 0; j < 8; j++) { 
    musicGrid[i][j] = (ImageButton) findViewById("R.id." + number_as_word[i] + (j+1)); 
    } 
} 
+0

Questo è un modo molto più conciso per fare ciò che ho avuto, e lo adoro. Il vero problema però, che ho completamente dimenticato di menzionare (il mio male!) È che findViewByID dice che vuole un intero, non una stringa. Quindi, come posso ottenere Java per valutare quella stringa come ID? Suppongo che non posso semplicemente lanciarlo. – Nick

+0

Sì, me ne sono dimenticato. Guarda la risposta di Cristian. – AndrewKS

0

A meno che non ci sia una necessità specifica per farlo come singoli ImageButtons, si potrebbe essere meglio utilizzare un GridView.

Here è un tutorial che utilizza le immagini in una GridView utilizzando un adattatore.

Problemi correlati