2012-12-19 31 views
5

Tôi đã quản lý để tạo các nút trong vòng lặp for và không thấy lý do nào không khai báo các biến của tôi bên trong nó. Thật không may eclipse chỉ xác định "bt" và không muốn thay thế [i] ​​của tôi với số nó đại diện trong vòng lặp và kết quả là tìm id chính xác trong bố cục của tôi. Bất kỳ suy nghĩ về cách thực hiện công việc này? Tôi cũng biết ơn đối với bất kỳ giải pháp khác như xinh đẹp như tôi, mà không làm việc;)Tuyên bố các biến của nút dưới dạng mảng với vòng lặp for android

Button [] bt = new Button[6]; 

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.start_layout); 

    bt[0] = (Button) findViewById(R.id.bt0); 
    bt[1] = (Button) findViewById(R.id.bt1);//This is what i'm trying to replace 
    bt[2] = (Button) findViewById(R.id.bt2); 
    bt[3] = (Button) findViewById(R.id.bt3); 
    bt[4] = (Button) findViewById(R.id.bt4); 
    bt[5] = (Button) findViewById(R.id.bt5); 


    for (int i=0; i<6; i++) { 
     final int b = i; 
     bt [i] = (Button)findViewById(R.id.bt[i]); <----//Whith this 
     bt [i].setOnClickListener(new View.OnClickListener() { 

      @Override 
      public void onClick(View v) { 

       Intent myIntent = new Intent(Start.this, MainActivity.class); 
       myIntent.putExtra("players", b); 
       startActivity(myIntent); 

       //startActivity(new Intent(Start.this, MainActivity.class)); 
      } 
     }); 

    } 
} 
+3

'BT [i] 'sẽ được thay thế với' BT [1] 'và không phải 'bt1' cho' i = 1'. Bạn không thể sử dụng biến như vậy. –

+0

@RohitJain đó là lý do tại sao OP hỏi câu hỏi. –

+0

Đây là một giải pháp cho vấn đề của bạn http://stackoverflow.com/questions/3648942/dynamic-resource-loading-android – evilone

Trả lời

11

tôi sẽ làm như sau:

private static final int[] idArray = {R.id.bt0, R.id.bt1, R.id.bt2, R.id.bt3, R.id.bt4, R.id.bt5}; 

private Button[] bt = new Button[idArray.length]; 

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.start_layout); 

    for (int i=0; i<idArray.length; i++) { 
     final int b = i; 
     bt [b] = (Button)findViewById(idArray[b]); // Fetch the view id from array 
     bt [b].setOnClickListener(new View.OnClickListener() { 

      @Override 
      public void onClick(View v) { 

       Intent myIntent = new Intent(Start.this, MainActivity.class); 
       myIntent.putExtra("players", b); 
       startActivity(myIntent); 

       //startActivity(new Intent(Start.this, MainActivity.class)); 
      } 
     }); 

    } 
} 

Nếu bạn muốn thêm hoặc bỏ các nút, chỉ cần thêm nó vào idArray và tất cả những thứ khác đều năng động.

+0

câu trả lời hay .... +1 – SilentKiller

+0

Đủ đơn giản để hiểu và thực sự đẹp. Tôi sẽ thử ngay sau khi tôi bắt đầu công việc của mình. Ngày mai! – Epcilon

+0

Cảm ơn bạn. Vui mừng nếu nó giúp :) –

0

Tôi nghĩ nếu bạn có nhóm các nút tương tự - tất cả đều được đặt bên trong 1 bố cục mẹ trên bố cục (LinearLayout hoặc RelativeLayout hoặc một thứ khác). Bạn có thể lấy cha mẹ và lấy tất cả trẻ em. Bằng cách này bạn không cần phải chỉ định id cho mỗi nút.

ViewGroup buttonsView = (ViewGroup) findViewById(R.id.buttons); 
List<Button> buttons = new ArrayList<Button>(); 
for (int i = 0; i < buttonsView.getChildCount(); i++) { 
    buttons.add((Button) buttonsView.getChildAt(i)); 
} 

Ngoài ra, bạn có thể lưu trữ số nút trong thẻ của nó, do đó bạn không cần phải tạo final int biến:

ViewGroup buttonsView = (ViewGroup) findViewById(R.id.buttons); 
List<Button> buttons = new ArrayList<Button>(); 
View.OnClickListener listener = new View.OnClickListener() { 
    @Override 
    public void onClick(View v) { 
     Intent myIntent = new Intent(Start.this, MainActivity.class); 
     myIntent.putExtra("players", (Integer) v.getTag()); 
     startActivity(myIntent); 
     //startActivity(new Intent(Start.this, MainActivity.class)); 
    } 
}; 
for (int i = 0; i < buttonsView.getChildCount(); i++) { 
    Button button = (Button) buttonsView.getChildAt(i); 
    button.setTag(i); 
    button.setOnClickListener(listener); 
    buttons.add(buttons); 
} 
+0

Chỉ muốn làm rõ, điều này chỉ hoạt động nếu 'ViewGroup' không chứa gì ngoài tất cả các nút. Nó không thể chứa bất kỳ đứa trẻ nào khác. –

+0

Cảm ơn bạn đã dành thời gian để chờ đợi câu hỏi của tôi Nikita, nhưng đó là một chút ngoài sự hiểu biết của tôi kể từ khi tôi khá mới để lập trình. – Epcilon

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