我们如何以编程方式将Switch集的状态更改区分为用户设置的状态?

时间:2017-04-02 10:37:32

标签: android android-recyclerview android-switch

我有一个Switch。它的工作原理如下 1.将其打开会显示带有Download/locate/cancel选项的AlertDialog以执行(download)/(locate locally)/(cancel the dialog)

2.将其关闭会显示带有Yes/No选项的AlertDialog以删除文件

现在假设最初,Switch状态为OFF。现在,如果我将其转为ON,则Listener会将OnChecked注册为true。接下来,如果我按取消对话框,On​​Checked将被设置为false,因为没有找到/下载文件。现在,即使以编程方式设置,侦听器也会检测到此更改。我需要一种方法来划分Switch状态由用户和程序引起的更改。

我的监听器是OnCheckedChangeListener。

我知道有类似的问题在线提供临时或不完整的解决方案。

编辑:我编辑并更改了问题的完整结构,以解决我的根本目标。它应该不是问题,因为在编辑时没有答案。

1 个答案:

答案 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之外,它从未出现在搜索上。如果有一个我错过的更好的解决方案,请告诉我。

注意:我将此作为解决方案发布,因为它也回答了已编辑的问题。在接受我自己的解决方案之前,我会等几天寻求更好的答案。