2010-10-14 29 views
8

Xin chào. Ứng dụng của tôi sẽ sử dụng một loạt 64 ImageButtons (8x8), và tất cả chúng đều đã được khai báo trong XML Layout của tôi với các tên như one1, two5, eight8, etc. Thay vì khai báo từng cái riêng lẻ trong Java của tôi, tôi nghĩ nó có thể thông minh để tuyên bố tất cả trong một số cho các vòng lặp. Tôi cóMảng của ImageButtons, gán R.view.id từ một biến

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

Sau đó, tôi đã lồng vào các vòng lặp về cơ bản tạo chuỗi sẽ thay thế R.id.whatever. Nó chỉ là dòng cuối cùng trong vòng của tôi, đó là nghĩa vụ phải làm việc chỉ định. Cú pháp chính xác cho điều đó là gì, hoặc là điều này thậm chí không thể làm được (và nếu vậy, tôi sẽ xử lý lưới nút 64 tốt hơn như thế nào?). Cảm ơn!

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

Thêm 64 nút vào tệp XML có thể là một cách tiếp cận không tốt. Với bố trí như vậy tại sao không chỉ tạo ra một khung nhìn trong Java và làm tất cả các chương trình? – Falmarri

Trả lời

8

Tôi thích AndrewKS 'for, nó thanh lịch hơn. Chỉ cần nhớ rằng findViewById nhận được một số nguyên chứ không phải là Chuỗi. Vì vậy, bạn sẽ phải làm một cái gì đó như:

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

Ồ, trông giống như những gì tôi cần. Tôi sẽ cho bạn biết nếu nó hoạt động. Cảm ơn một tấn. – Nick

2

Nếu bạn không đã hardcode các nút trong xml, tôi sẽ nói để làm điều đó theo chương trình với một ViewInflater, nhưng kể từ khi bạn đã làm ở đây là mã:

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

Đó là một cách ngắn gọn hơn nhiều để làm những gì tôi có, và tôi thích nó. Vấn đề thực tế mặc dù, mà tôi hoàn toàn quên đề cập đến (xấu của tôi!) Là findViewByID nói rằng nó muốn một số nguyên, không phải là một String. Vậy làm thế nào để tôi nhận được Java để đánh giá chuỗi đó là một ID? Tôi giả sử tôi không thể bỏ nó. – Nick

+0

Yup, tôi quên mất điều đó. Xem câu trả lời của Cristian. – AndrewKS

0

Trừ khi có một số nhu cầu cụ thể để làm điều đó như ImageButtons riêng lẻ, bạn có thể là nên sử dụng một GridView.

Here là hướng dẫn sử dụng hình ảnh trong GridView sử dụng bộ điều hợp.

Các vấn đề liên quan