安卓:ToggleButton 监听器

20

我有这段代码在这里

ToggleButton toggleAlarm = (ToggleButton) d.findViewById(R.id.toggle_alarm);
toggleAlarm.setOnCheckedChangeListener(new OnCheckedChangeListener() {
    public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
        if(isChecked)
        {
            Log.d("alarmCheck","ALARM SET TO TRUE");
            sched.setAlarm(true);
        }
        else
        {
            Log.d("alarmCheck","ALARM SET TO FALSE");
            sched.setAlarm(false);
        }
    }
});

我必须跟踪它的开关状态。但是,当我将其记录到logcat中时,无论它是开还是关,它都不起作用。我不知道出了什么问题,因为在我的其他代码中,语法相同,但它能正常工作,我只是复制粘贴它并仅更改ToggleButton变量。

编辑

我观察到,在cdr. Powell的帮助下,当您将此代码块(即我发布的代码)放在另一个匿名侦听器中时,即保存按钮的侦听器中,checkOnChangedListener会损坏,它不能很好地在另一个匿名侦听器中运行,但我不理解的一件事是,我的代码中也有一个外部侦听器,就像一个按钮来显示对话框,而在该对话框中,有一个添加按钮,它打开另一个具有切换按钮和另一个保存或添加按钮的对话框,该对话框关闭并返回到之前的对话框,然后显示新添加的记录,所以你们中的任何人有想法吗?为什么将其放在保存按钮的侦听器中时会出现问题,但在外部侦听器中却可以正常工作。


1
我猜测 ToggleButton toggleAlarm = (ToggleButton) d.findViewById(R.id.toggle_alarm) 出了问题,因为 onCheckedChanged() 没有被执行。这种情况很容易出现在复制粘贴时。 - Cdr. Powell
C&P是什么意思?抱歉,我是个新手,对移动开发不太熟悉。 - lemoncodes
3
将英语翻译成中文。请复制并粘贴翻译后的文本,抱歉我有点懒。 - Cdr. Powell
哦,我明白了,所以我必须重新编写代码?好的,我会重写这个并看看它是否有效,如果不行,我会尝试下面Sir M Mohsin Naeem的代码。 - lemoncodes
我投票关闭此问题,因为-尽管它的分数高-但我在其中找不到句子从哪里开始。请查看最后一段。如果您选择“保持开放”,请修复最后一段。 - peterh
显示剩余5条评论
4个回答

20

试试这个,也许问题出在import上面。

toggleAlarm.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() {

@Override
public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
    if(isChecked)
    {
        Log.d("alarmCheck","ALARM SET TO TRUE");
        sched.setAlarm(true);
    }
    else
    {
        Log.d("alarmCheck","ALARM SET TO FALSE");
        sched.setAlarm(false);
    }

}
});

不好意思,先生,它不起作用。与之前的日志一样,什么也没有记录,就好像那个代码块不存在一样。 - lemoncodes

1
如果toggleAlarm.isChecked()对您无效,您可以始终。
boolean _isChecked = false;
((ToggleButton) d.findViewById(R.id.toggle_alarm)).setOnClickListener(new OnOnClickListener() {
    public void onClick(View arg0) {
        _isChecked = !isChecked;            
        if(_isChecked()) {
            Log.d("alarmCheck","ALARM SET TO TRUE");
            sched.setAlarm(true);
        }
        else {
            Log.d("alarmCheck","ALARM SET TO FALSE");
            sched.setAlarm(false);
        }
    }
});

将if(_isChecked())改为if(_isChecked),因为在这种情况下它不是一个方法。 - Ghali

1
尝试使用toggleAlarm.isChecked()来查看按钮是否被选中。

0

所以我观察到,在cdr.powell的帮助下,当您将此代码块(即我发布的代码)放在另一个匿名监听器内部时,例如用于保存按钮的监听器,checkOnChangedListener会断掉,它无法在另一个匿名监听器内部正常工作。但我不理解的一件事是,我的代码中也有一个外部监听器,就像一个按钮,用于显示对话框,而在该对话框中,有一个添加按钮,打开另一个对话框,其中包含那个切换按钮和另一个保存或添加按钮,关闭该对话框并返回到前一个对话框,然后显示新添加的记录。所以你们中的任何人知道为什么在将其放入保存按钮的监听器中时它会出现问题,但在外部监听器中运行良好。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接