2012-07-04 36 views
11

Đây là mã của tôi:Làm cách nào để thực hiện điều gì đó khi trạng thái thay đổi hộp kiểm?

<CheckBox 
     android:id="@+id/sprint_checkbox" 
     android:layout_width="fill_parent" 
     android:layout_height="wrap_content" 
     android:text="@string/sprint_game" /> 

    <CheckBox 
     android:id="@+id/marathon_checkbox" 
     android:layout_width="fill_parent" 
     android:layout_height="wrap_content" 
     android:text="@string/marathon" /> 

    <CheckBox 
     android:id="@+id/never_ending_checkbox" 
     android:layout_width="fill_parent" 
     android:layout_height="wrap_content" 
     android:text="@string/never_ending" /> 

gì tôi muốn làm là "phát hiện" khi một trong những được kiểm tra và sau đó đặt hai người kia để "vô hiệu hóa", do đó người dùng có thể chọn chỉ một lúc. Tôi đã cố gắng sử dụng ".setOnCheckedChangeListener", nhưng tôi không thể làm điều đó, ai đó có thể giúp tôi với một số mã? Cảm ơn rất nhiều bạn!

+0

"" Tôi đã cố gắng sử dụng ".setOnCheckedChangeListener", nhưng tôi không thể làm điều đó "" lý do tại sao bạn không thể làm điều đó? Đặt mã của 'setOnCheckedChangeListener' –

+0

Trình nghe thay đổi đã chọn là cách để làm những gì bạn đang nói. – matt5784

+2

tại sao không sử dụng nút radio. (tức là nhóm radio). Đó là lý do tại sao những người được thực hiện. Sử dụng chỉ có thể pic một, không cần phải vô hiệu hóa hai khác. Và bằng cách onCheckChangedListener cũng hoạt động trên các nút radio. – drulabs

Trả lời

25

Đây là cách bạn được thông báo về những thay đổi kiểm tra:

CheckBox check = findViewById(R.id.sprint_checkbox); 
check.setOnCheckedChangeListener(new OnCheckedChangeListener() { 

     @Override 
     public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) { 
      //do stuff 

     } 
    }); 

Bạn cũng có thể cho hoạt động của bạn cài đặt giao diện OnCheckedChangeListener và sau đó:

CheckBox check1 = findViewById(R.id.sprint_checkbox); 
CheckBox check2 = findViewById(R.id.marathon_checkbox); 
CheckBox check3 = findViewById(R.id.never_ending_checkbox); 

check1.setOnCheckedChangeListener(this); 
check2.setOnCheckedChangeListener(this); 
check3.setOnCheckedChangeListener(this); 

Trọng phương pháp giao diện:

@Override 
public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) { 
    switch(buttonView.getId()){ 
       case R.id.sprint_checkbox: 
       //do stuff 
       break; 
       case R.id.marathon_checkbox: 
       //do stuff 
       break; 
       case R.id.never_ending_checkbox: 
       //do stuff 
       break; 

      } 

} 
+0

Cảm ơn bạn rất nhiều! – hyperloris

+1

Cảm ơn bạn. mã của bạn đã giải quyết vấn đề của tôi trong khi nhận các giá trị boolean từ hộp kiểm. – BK19

1

Tôi tin rằng RadioButton phù hợp hơn với mục tiêu của bạn.

<RadioGroup 
    android:layout_width="fill_parent" 
    android:layout_height="wrap_content" 
    android:orientation="vertical" 
    android:id="@+id/radio_group1"> 
    <RadioButton 
     android:id="@+id/sprint" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:text="@string/rad_option1" 
     android:checked="true" 
    android:onClick="onRadioButtonClick" 
     /> 
    <RadioButton 
     android:id="@+id/marathon" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:text="@string/rad_option2" 
     android:onClick="onRadioButtonClick" 
     /> 
    <RadioButton 
     android:id="@+id/neverending" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:text="@string/rad_option3" 
     android:onClick="onRadioButtonClick" 
     /> 
</RadioGroup> 

Sau đó, trong mã của bạn:

public void onRadioButtonClick(View v) { 
    RadioButton button = (RadioButton) v; 
    // DO YOUR THING HERE DEPENDING ON WHICH RADIOBUTTON IS PICKED 
} 

Trong trường hợp này, bạn sẽ không phải đối phó với việc vô hiệu hóa tùy chọn khác. Người dùng sẽ chỉ có một tùy chọn để chọn theo mặc định.

1
@Override 
public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) { 

    int id = buttonView.getId(); 

    if(isChecked){ 
     switch(id){ 
      case R.id.sprint: 
      //add to database 
      ... 
     } 
    } 
    else{ 
     switch(id){ 
      case R.id.sprint: 
      //remove from database 
      ... 
     } 
    } 
} 

Điều này sẽ cho phép bạn có ID. Hy vọng nó hoạt động.

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