Android 检查是否选中了任何复选框
我在android应用程序中有一周的复选框,我想让一个监听器检查这些复选框中的任何一个是否被选中,但我的方法似乎很难,难道没有一种方法可以将所有监听器集中到一个中吗Android 检查是否选中了任何复选框,android,checkbox,actionlistener,dayofweek,Android,Checkbox,Actionlistener,Dayofweek,我在android应用程序中有一周的复选框,我想让一个监听器检查这些复选框中的任何一个是否被选中,但我的方法似乎很难,难道没有一种方法可以将所有监听器集中到一个中吗 sun.setOnCheckedChangeListener(new OnCheckedChangeListener() { public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) { if ( isChe
sun.setOnCheckedChangeListener(new OnCheckedChangeListener()
{
public void onCheckedChanged(CompoundButton buttonView, boolean isChecked)
{ if ( isChecked )
{
count=count+1;
// perform logic
}
else
{
count=count-1;
}
}});
mon.setOnCheckedChangeListener(new OnCheckedChangeListener()
{
public void onCheckedChanged(CompoundButton buttonView, boolean isChecked)
{ if ( isChecked )
{
count=count+1;
// perform logic
}
else
{
count=count-1;
}
}});
tue.setOnCheckedChangeListener(new OnCheckedChangeListener()
{
public void onCheckedChanged(CompoundButton buttonView, boolean isChecked)
{ if ( isChecked )
{
count=count+1;
// perform logic
}
else
{
count=count-1;
}
}});
wed.setOnCheckedChangeListener(new OnCheckedChangeListener()
{
public void onCheckedChanged(CompoundButton buttonView, boolean isChecked)
{ if ( isChecked )
{
count=count+1;
// perform logic
}
else
{
count=count-1;
}
}});
thu.setOnCheckedChangeListener(new OnCheckedChangeListener()
{
public void onCheckedChanged(CompoundButton buttonView, boolean isChecked)
{ if ( isChecked )
{
count=count+1;
// perform logic
}
else
{
count=count-1;
}
}});
fri.setOnCheckedChangeListener(new OnCheckedChangeListener()
{
public void onCheckedChanged(CompoundButton buttonView, boolean isChecked)
{ if ( isChecked )
{
count=count+1;
// perform logic
}
else
{
count=count-1;
}
}});
sat.setOnCheckedChangeListener(new OnCheckedChangeListener()
{
public void onCheckedChanged(CompoundButton buttonView, boolean isChecked)
{ if ( isChecked )
{
count=count+1;
// perform logic
}
else
{
count=count-1;
}
}});
您可以检查正在触发的buttonView的id并进行适当的验证,只需将相同的onCheckListener分配给复选框并执行如下操作:
private OnCheckedChangeListener checkedListener = new OnCheckedChangeListener() {
@Override
public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
switch(buttonView.getId()){
case R.id.checkId1:
//TODO: Code for checked one...
break;
case R.id.checkId2:
//TODO: Code for checked two...
break;
}
}
};
希望有帮助
问候 如果您具有此处未提供的类似逻辑,您可以创建一个复选框列表,并在一个周期内为其创建侦听器。让您的活动实现OnCheckedChangeListener,然后您就拥有onCheckChanged
@Override
public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
switch (buttonView.getId()) {
case R.id.sun:
break;
case R.id.mon:
break;
default:
break;
}
}
有,;在类中使用他的方法实现View.OnClickListener
@Override
public void onClick(View v) {
switch (v.getId()){
case R.id.checbox1:
if(checkbo1.isCheck){
//do logic then dont forget to set to the opposite state
checkbox.setChecked(false);
}
else{
//do logic
checkbox.setChecked(true);
}
break;
//
case R.id.checbox2:
//do logic etc...
break;
}
}
然后在来自用户的不同点击事件之间使用切换案例处理
希望能有所帮助当然还有一个更简单的方法。只需在执行此操作的地方将您的活动实现为OnCheckdChangeListener
public Class MyActivity extends Activity implements OnCheckedChangeListener{
//your activity logic in here
@Override
public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
//your Activity will now receive onCheckedChangeEvents here from
//the checkboxes to which you assign it as a listener
}
}
,在onCreate中,在获得对所有一天复选框的引用后,将活动设置为侦听器,如下所示
@Override
public void onCreate(Bundle savedInstanceState){
//first get references to all your checkboxes and assign them to mon, tue, wed etc.
//then set the listeners
mon.setOnCheckedChangeListener(this);
tue.setOnCheckedChangeListener(this);
wed.setOnCheckedChangeListener(this);
thu.setOnCheckedChangeListener(this);
fri.setOnCheckedChangeListener(this);
sat.setOnCheckedChangeListener(this);
sun.setOnCheckedChangeListener(this);
}
<CheckBox
android:id="@+id/checkMonday"
....
@Override
public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
int id = buttonView.getId();
if(isChecked){
counter++; //a day has been checked
}else{
counter--; //a day has been unchecked
}
switch(id){
case R.id.checkMonday:
//logic for Monday
break;
case R.id.checkTuesday:
//logic for Tuesday
break;
...
}
}
,确保在布局xml中为所有复选框分配了ID,如下所示
@Override
public void onCreate(Bundle savedInstanceState){
//first get references to all your checkboxes and assign them to mon, tue, wed etc.
//then set the listeners
mon.setOnCheckedChangeListener(this);
tue.setOnCheckedChangeListener(this);
wed.setOnCheckedChangeListener(this);
thu.setOnCheckedChangeListener(this);
fri.setOnCheckedChangeListener(this);
sat.setOnCheckedChangeListener(this);
sun.setOnCheckedChangeListener(this);
}
<CheckBox
android:id="@+id/checkMonday"
....
@Override
public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
int id = buttonView.getId();
if(isChecked){
counter++; //a day has been checked
}else{
counter--; //a day has been unchecked
}
switch(id){
case R.id.checkMonday:
//logic for Monday
break;
case R.id.checkTuesday:
//logic for Tuesday
break;
...
}
}
那就应该成功了 您可以创建一个最终的OnCheckChangeListener,只需按按钮重用它,而不是重写代码。此外,count+=1与count=count+1相同,并且更易于阅读,imoit说“参数侦听器的修饰符非法;只允许使用final”即使最终使用了相同的错误,也要提前感谢。它会说,只有在方法中有侦听器的情况下,如果将侦听器移动到成员级别(在任何方法之外,但在类中),它才能工作,在继续使用Android之前,您应该阅读一本好的Java书籍……您建议哪本书??:DSun认证Java程序员SE 6学习指南,作者:Kathy Sierra和Bert Bates,是Java程序员的圣经,你会喜欢它的,另外,如果你能通读并完全理解它,你可以申请Oracle Java认证考试,并且是一个保证通过的考试。。。