我有一个Switch。它的工作原理如下
1.将其打开会显示带有Download/locate/cancel
选项的AlertDialog以执行(download)/(locate locally)/(cancel the dialog)
2.将其关闭会显示带有Yes/No
选项的AlertDialog以删除文件
现在假设最初,Switch状态为OFF
。现在,如果我将其转为ON
,则Listener会将OnChecked注册为true。接下来,如果我按取消对话框,OnChecked将被设置为false,因为没有找到/下载文件。现在,即使以编程方式设置,侦听器也会检测到此更改。我需要一种方法来划分Switch
状态由用户和程序引起的更改。
我的监听器是OnCheckedChangeListener。
我知道有类似的问题在线提供临时或不完整的解决方案。
编辑:我编辑并更改了问题的完整结构,以解决我的根本目标。它应该不是问题,因为在编辑时没有答案。
答案 0 :(得分:0)
此问题在线有几个答案。 它们包括编写扩展SwitchCompat,CompundButton等的自定义开关;使用SilentlySetChecked方法。
如果我们实现OnClickListener而不是OnCheckedChangeListener,那么就不会有任何递归警告对话框的问题。但我们无法检测此侦听器中的滑动更改。
简单地说,我们需要通过单击/滑动来检测状态更改而不会出现递归问题:
CompoundButton.OnCheckedChangeListener downloadButtonListener = new CompoundButton.OnCheckedChangeListener() {
@Override
public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
if (holder.downloadSwitch.isPressed() & isChecked) {
//if switch is turned on by click/swipe
}
else if(holder.downloadSwitch.isPressed() & !isChecked{
//if switch is turned on by click/swipe
}
}
});

这是一个解决问题的简单解决方案。但是,除了部分here之外,它从未出现在搜索上。如果有一个我错过的更好的解决方案,请告诉我。
注意:我将此作为解决方案发布,因为它也回答了已编辑的问题。在接受我自己的解决方案之前,我会等几天寻求更好的答案。