2010-10-14 20 views
8

Hey orada. Uygulamam 64 Resim Düğmesi (8x8) dizisi kullanacak ve hepsi XML Düzeni'nde bir1, iki5, sekiz8 gibi adlarla zaten bildirilmiş durumda. Bunların her birini ayrı ayrı benim Java'mda ilan etmektense bunu düşündüm Bazılarını döngülerde ilan etmek akıllıca olabilir. Ben ImageButtons dizisi, bir değişkenden R.view.id değerini atayın

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

Sonra temelde R.id.whatever yerine olacak bir dize oluşturmak döngüler için benim iç içe olması gerekir. Bu sadece benim döngülerimin son çizgisidir, bu da atamayı yapmak zorundadır. Bunun için doğru sözdizimi ne olurdu, yoksa bunu yapmak bile mümkün değil (ve eğer öyleyse, 64 düğme ızgarasını ne kadar iyi kullanırdım?). Teşekkürler!

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

Bir XML dosyasına 64 düğme eklemek muhtemelen kötü bir yaklaşımdır. Bunun gibi düzenler sayesinde, sadece Java'da bir görünüm yaratmamak ve hepsini programlı bir şekilde yapmıyorsunuz? – Falmarri

cevap

8

'for, daha zarif. Sadece findViewById'un bir String yerine bir tam sayı aldığını unutmayın. Yani böyle bir şey yapmak zorunda kalacaktır: Bireysel imagebuttons olarak bunu yapmak için bazı özel ihtiyaç olmadığı sürece

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

Oh, tam ihtiyacım olana benziyor. Çalışırsa size bildiririm. Bir ton teşekkürler. – Nick

2

zaten xml düğmeleri hardcode olmasaydı, ben bir ViewInflater ile programlı yap dedi olurdu, ama burada yaptığı beri kod: Ben AndrewKS gibi

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

Bu benim sahip olduğum şeyi yapmanın çok daha özlü bir yolu ve ben onu seviyorum. Asıl problemi, tamamen unutmaya çalıştığım (benim kötü!) FindViewByID'nin bir tamsayı değil, bir String olmasını istediğidir. Peki bu ipi bir kimlik olarak değerlendirmek için Java'yı nasıl alabilirim? Sadece onu atayamayacağımı kabul ediyorum. – Nick

+0

Yup, bunu unuttum. Cristian'ın cevabına bakın. – AndrewKS

0

, bir GridView kullanarak daha iyi olabilir.

Here GridView'teki görüntüleri bir bağdaştırıcı kullanarak kullanarak bir öğreticidir.

İlgili konular