2017-03-03 170 views
0

我有10个复选框,我想在选中最多6个复选框后禁用剩下的复选框。如何在选中多个复选框后禁用复选框?

如何使用OnCheckChangedListener来解决问题。

如果我写的代码如下,我需要重复10次

checkbox1.setOnCheckedChangeListener(new OnCheckedChangeListener() { 

@Override 
public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) { 
    if (isChecked && numberOfCheckboxesChecked >= 6) { 
     checkbox1.setChecked(false); 
    } else { 
    } 
}}; 

我应该怎么做,以减少冗余代码?

+0

你需要保持布尔检查是否列表复选框是否被选中。 – UserSharma

+0

@UserSharma我能举个例子吗?我是一个新手,在创建一个类之后我不太明白 – hatched

回答

0

您可以创建一个名为类而不是匿名类:

checkbox1.setOnCheckedChangeListener(new MyCheckboxChangeListener()); 
checkbox2.setOnCheckedChangeListener(new MyCheckboxChangeListener()); 
... 

private static class MyCheckboxChangeListener implements OnCheckedChangeListener { 

    private static int numberOfCheckboxesChecked; 

    @Override 
    public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) { 
     if (isChecked) { 
      if (numberOfCheckboxesChecked >= 6) { 
       buttonView.setChecked(false); 
      } else { 
       numberOfCheckboxesChecked++; 
      } 
     } else { 
      numberOfCheckboxesChecked--;    
     } 
    } 
} 

或者你可以在你的活动实现的接口:

public class MainActivity extends AppCompatActivity implements OnCheckedChangeListener { 

    ... 
    private int numberOfCheckboxesChecked; 
    ... 

    @Override 
    public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     ... 
     checkbox1.setOnCheckedChangeListener(this); 
     checkbox2.setOnCheckedChangeListener(this); 
    } 

    @Override 
    public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) { 
     if (isChecked) { 
      if (numberOfCheckboxesChecked >= 6) { 
       buttonView.setChecked(false); 
      } else { 
       numberOfCheckboxesChecked++; 
      } 
     } else { 
      numberOfCheckboxesChecked--;    
     } 
    } 

} 
+0

,那么我只是在我的活动中实现该功能? – hatched

+0

我不确定你在问什么。但是,我例举的方法是[嵌套类](https://www.tutorialspoint.com/java/java_innerclasses.htm)。如你所说,你也可以在你的活动中实现这个监听器。在这种情况下,您可以使用'checkbox1.setOnCheckedChangeListener(this)',您的活动将使用'onCheckedChanged'方法。 – BMacedo

+0

谢谢,我会尝试一下 – hatched