我正在使用3个切换按钮。在我的Android应用程序中,我希望一次只能选择其中一个切换按钮。我该怎么做呢?
答案 0 :(得分:12)
一个简单的onChangeListener将执行:
public class TestProjectActivity extends Activity {
ToggleButton one;
ToggleButton two;
ToggleButton three;
ToggleButton four;
/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
one = (ToggleButton) findViewById(R.id.toggleButton1);
two = (ToggleButton) findViewById(R.id.toggleButton2);
three = (ToggleButton) findViewById(R.id.toggleButton3);
four = (ToggleButton) findViewById(R.id.toggleButton4);
one.setOnCheckedChangeListener(changeChecker);
two.setOnCheckedChangeListener(changeChecker);
three.setOnCheckedChangeListener(changeChecker);
four.setOnCheckedChangeListener(changeChecker);
}
OnCheckedChangeListener changeChecker = new OnCheckedChangeListener() {
@Override
public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
if (isChecked){
if (buttonView == one) {
two.setChecked(false);
three.setChecked(false);
four.setChecked(false);
}
if (buttonView == two) {
one.setChecked(false);
three.setChecked(false);
four.setChecked(false);
}
if (buttonView == three) {
two.setChecked(false);
one.setChecked(false);
four.setChecked(false);
}
if (buttonView == four) {
two.setChecked(false);
three.setChecked(false);
one.setChecked(false);
}
}
}
};
}
答案 1 :(得分:6)
ThePikeman的解决方案没问题,但根据您拥有的按钮数量,您可能需要考虑一个可以迭代的数组。
对于少数按钮,Pikeman的代码可以简化以节省一些打字......
public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
if (isChecked){
if (buttonView != one) {
one.setChecked(false);
}
if (buttonView != two) {
two.setChecked(false);
}
if (buttonView != three) {
three.setChecked(false);
}
if (buttonView != four) {
four.setChecked(false);
}
}
}
答案 2 :(得分:3)
您可以使用radio buttons。如果您不想这样,请查看this link - 它会告诉您如何监听按钮状态的更改。如果您发现其中一个按钮已更改,请将另一个按钮更改为关闭状态。
答案 3 :(得分:0)
我使用以下功能;
private void setIsChecked(CheckBox checkBox){
buttonOne.setChecked(false);
buttonTwo.setChecked(false);
buttonThree.setChecked(false);
checkBox.setChecked(true)
}
现在所有这些都被认为是你选择的那个
离
setIsChecked(buttonOne);
现在只检查按钮1等。