各位大家好
我面临以下问题,我有一个包含两个小部件的片段,一个Switch和一个Seekbar。我在Switch打开和关闭时尝试执行一个函数,并且当它跟踪的Seekbar时也是一个方法,这两种方法都会影响这两个小部件,例如假设我们有一个Dimmable Light,我们可以打开或关闭或者我们也可以调暗光亮度,这就是我所说的。
我试图在Switch小部件上使用事件
setOnCheckedChanged
,但问题是当我移动搜索栏以更改Dim时我必须更改检查Switch的状态,当时这个小部件再次触发setOnCheckedChanged事件,所以我得到类似循环的东西。
我的问题是,有什么方法可以将onCheckedChanged事件限制为仅在用户实际触摸屏幕中的窗口小部件时被触发?
这是我正在使用的代码:
sw_dimmable.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() {
@Override
public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
pb_dimmable.setVisibility(View.VISIBLE);
String val = "0";
if (isChecked) {
val = "100";
} else {
val = "0";
}
new handleTurnOffOn(getActivity()).execute(val);
}
});
搜索栏的代码:
seekBar_dimmable.setOnSeekBarChangeListener(new SeekBar.OnSeekBarChangeListener() {
String val = "0";
@Override
public void onProgressChanged(SeekBar seekBar, int progress, boolean fromUser) {
}
@Override
public void onStartTrackingTouch(SeekBar seekBar) {
}
@Override
public void onStopTrackingTouch(SeekBar seekBar) {
pb_dimmable.setVisibility(View.VISIBLE);
val = String.valueOf(seekBar_dimmable.getProgress());
new handleLevelChange(getActivity()).execute(val);
}
});
这些事件称这种方法为:
public void LoadInputFields() {
lb_dimmable_name.setText(deviceItemDimmable.getDeviceItemName());
if(deviceItemDimmable.getDeviceItemDimmableStatus().equals("0") ){
lb_dimmable_status.setText("Status: Off");
sw_dimmable.setChecked(false);
}else{
lb_dimmable_status.setText("Status: On");
sw_dimmable.setChecked(true);
}
String level = deviceItemDimmable.getDeviceItemDimmableLevel();
if(level != null){
Integer val = Integer.valueOf(level);
seekBar_dimmable.setProgress(val);
}else {
seekBar_dimmable.setProgress(0);
}
}
先谢谢
根据
@ once2go的答案解决问题
public void LoadInputFields() {
lb_dimmable_name.setText(deviceItemDimmable.getDeviceItemName());
if(deviceItemDimmable.getDeviceItemDimmableStatus().equals("0") ){
lb_dimmable_status.setText("Status: Off");
sw_dimmable.setOnCheckedChangeListener(null);
sw_dimmable.setChecked(false);
}else{
lb_dimmable_status.setText("Status: On");
sw_dimmable.setOnCheckedChangeListener(null);
sw_dimmable.setChecked(true);
}
String level = deviceItemDimmable.getDeviceItemDimmableLevel();
if(level != null){
Integer val = Integer.valueOf(level);
seekBar_dimmable.setProgress(val);
}else {
seekBar_dimmable.setProgress(0);
}
}
答案 0 :(得分:0)
您可以创建不作为方法参数的侦听器,而是创建对象,f-e:
private CompoundButton.OnCheckedChangeListener own_listener = new CompoundButton.OnCheckedChangeListener() {
@Override
public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
pb_dimmable.setVisibility(View.VISIBLE);
String val = "0";
if (isChecked) {
val = "100";
} else {
val = "0";
}
new handleTurnOffOn(getActivity()).execute(val);
}
}
然后在影响第一个侦听器的另一个widget侦听器中,设置null侦听器,f-e:
seekBar_dimmable.setOnSeekBarChangeListener(new SeekBar.OnSeekBarChangeListener() {
String val = "0";
@Override
public void onProgressChanged(SeekBar seekBar, int progress, boolean fromUser) {
}
@Override
public void onStartTrackingTouch(SeekBar seekBar) {
sw_dimmable.setOnCheckedChangeListener(null); // here is disable listener
}
@Override
public void onStopTrackingTouch(SeekBar seekBar) {
sw_dimmable.setOnCheckedChangeListener(own_listener); // here is enable listener
pb_dimmable.setVisibility(View.VISIBLE);
val = String.valueOf(seekBar_dimmable.getProgress());
new handleLevelChange(getActivity()).execute(val);
}
});
希望它的帮助