2012-05-20 30 views
9

Tôi đã tạo các nút động thông qua mã thay vì từ XML.
Mã này là như sau:
Triển khai OnClickListener cho các nút được tạo động trong Android

dynamicview = (LinearLayout)findViewById(R.id.llayout); 
    LinearLayout.LayoutParams lprams = new LinearLayout.LayoutParams(
      LinearLayout.LayoutParams.WRAP_CONTENT, 
      LinearLayout.LayoutParams.WRAP_CONTENT); 

    for(int i=0;i<nob;i++){ 
     Button btn = new Button(this); 
     btn.setId(i+1); 
     btn.setText("Button"+(i+1)); 
     btn.setLayoutParams(lprams); 
     dynamicview.addView(btn); 
    } 


Tôi không tìm kiếm một cách thức mà tôi có thể thực hiện OnClickListener để mỗi một trong các nút để tôi có thể thực hiện hành động dựa trên các tài liệu tham khảo tôi nhận được.
Có ai có thể giúp tôi phân loại vấn đề này không. ?
Cảm ơn trước,

+0

Các câu trả lời được cung cấp là chính xác. Chế độ xem được chuyển vào onClickListender là Nút và có thể truyền. Nút btn = (Nút) v; Sau đó được sử dụng để truy cập id mà bạn đã đặt. – madmik3

Trả lời

23

Xem mã bên dưới:

for(int i=0;i<nob;i++) { 
    Button btn = new Button(this); 
    btn.setId(i+1); 
    btn.setText("Button"+(i+1)); 
    btn.setLayoutParams(lprams); 
    final int index = i; 
    btn.setOnClickListener(new OnClickListener() { 
     void onClick(View v) { 
      Log.i("TAG", "The index is" + index); 
     } 
    }); 
    dynamicview.addView(btn); 
} 

dụ của tôi là khá đơn giản, nhưng cho thấy làm thế nào bạn có thể nhận được các chỉ số nút vào OnClickListeber. Bạn có thể truy cập vào bất kỳ trường final nào trong các lớp ẩn danh được khai báo (ví dụ: OnClickListener).

+0

Nó đã giúp tôi – user1276092

+0

nếu tôi muốn thực hiện một số thao tác khác trên nút khác? Tôi nghĩ rằng nếu tôi viết một số mã trong trình nghe nhấp chuột của bạn Nó sẽ giống nhau CHO TẤT CẢ CÁC NÚT, làm thế nào tôi có thể đạt được chức năng khác nhau trên mỗi nút? –

+2

@ Dr.aNdRO Câu hỏi hợp lý với câu trả lời đơn giản. Để có chức năng khác nhau, bạn cần xác định 'OnClickListener's' khác nhau. Làm điều đó theo bất cứ cách nào bạn thích và chỉ cần điền chúng vào một trình lắng nghe 'OnClickListener [] mảng '. Sau đó, để làm 'btn.setOnClickListener (người nghe [i]);' –

5
for(int i=0;i<nob;i++){ 
     Button btn = new Button(this); 
     btn.setId(i+1); 
     btn.setText("Button"+(i+1)); 
     btn.setOnClickListener(btnclick); <<<<<<<set click 
     btn.setLayoutParams(lprams); 
     dynamicview.addView(btn); 
    } 

Và thêm listner này bên ngoài bất kỳ phương pháp và lớp bên trong

OnClickListener btnclick = new OnClickListener() { 

     @Override 
     public void onClick(View view) { 

      switch(view.getId()){ 
       case 1: 
       //first button click 
       break; 
       //Second button click 
       case 2: 
       break; 
       case 3: 
       //third button click 
       break; 
       case 4: 
       //fourth button click 
       break; 
      . 
      . 
      . 
      default: 
       break; 
       } 

     } 
    }; 
+0

đơn đặt hàng trong dây điện này không chính xác. bạn muốn làm cho người nghe trước vòng lặp. – madmik3

+1

không phải là một giải pháp thích hợp vì tôi sẽ không biết số lượng các nút trước khi bàn tay và hơn nữa tôi sẽ không muốn thêm một trường hợp cho mỗi nút. –

+0

@mirroredAbstraction đây là giải pháp thích hợp nhất cho mỗi lần nhấp nút ... và nếu bạn không cho tất cả thì chỉ cần phương thức onclick –

1

của nó điều tương tự ...

for(int i=0;i<nob;i++){ 
     Button btn = new Button(this); 
     btn.setId(i+1); 
     btn.setText("Button"+(i+1)); 
     btn.setLayoutParams(lprams); 
     btn.setOnCLickListsener(new listener()); 
     dynamicview.addView(btn); 
    } 

listener implemnets OnClickListenere{ 

public void onClick(View v){ 

} 

}

1
for(int i=0;i<nob;i++){ 
     Button btn = new Button(this); 
     btn.setId(i+1); 
     btn.setText("Button"+(i+1)); 
     btn.setLayoutParams(lprams); 
     btn.setOnClickListener(new OnClickListener() { 
      @Override 
      public void onClick(View v) { 
       /////Do some job on button click 
      } 
     }); 
     dynamicview.addView(btn); 
    } 
1

Sử dụng một List và thêm Button s bạn tạo với List

List<Button> list = new ArrayList<Button>(); 

Bây giờ thêm nút bấm của bạn vào danh sách mà

for(int i=0;i<nob;i++){ 
     Button btn = new Button(this); 
     btn.setId(i+1); 
     btn.setText("Button"+(i+1)); 
     btn.setLayoutParams(lprams); 
     dynamicview.addView(btn); 
     list.add(btn); 
    } 

Sau đó sử dụng tiên tiến cho vòng lặp để lặp qua danh sách và thêm nhấp chuột người nghe cho mỗi Nút ..

for(Button btn : list){ 
btn.setOnClickListener(this); 
} 
1

Có lẽ đây sẽ rất hữu ích cho ai đó tôi muốn sử dụng biến một quầy cho nhóm các nút tự động tạo ra:

tôi đã tạo ra các mảng cho quầy:

int[] squatReps; 

Từ sở thích tôi đã đưa ra những số lượng các yếu tố:

squatReps = new int[squatSets]; // where squatSets is taken from preferences 

Và cuối cùng chúng ta tạo ra các nút

for (int i = 0; i < squatSets; i++){ 
       squatReps[i] = Integer.parseInt(sharedPreferences.getString("squats_reps", "0")); 
       final Button squat_b = new Button(this.getActivity()); 
       squat_b.setId(i); 
       squat_b.setText(""); 
       squat_b.setLayoutParams(layoutParams); 
       final int index = i; 
       squat_b.setOnClickListener(new View.OnClickListener() { 
        @Override 
        public void onClick(View v) { 

         squat_b.setText(Integer.toString(squatReps[index]--));  
         startTimer();         
        } 
       }); 
       panel_1.addView(squat_b); 
Các vấn đề liên quan