Android 开关小部件中的事件问题
大家好 我面临以下问题,我有一个带有两个小部件的片段,一个开关和一个Seekbar。我试着在开关打开和关闭时执行一个函数,在Seekbar跟踪时执行一个方法,这两种方法都会影响两个小部件,例如,假设我们有一个可调光的灯,我们可以打开或关闭,也可以调暗灯光亮度,这就是我所说的情况 我试图在Switch小部件上使用事件Android 开关小部件中的事件问题,android,Android,大家好 我面临以下问题,我有一个带有两个小部件的片段,一个开关和一个Seekbar。我试着在开关打开和关闭时执行一个函数,在Seekbar跟踪时执行一个方法,这两种方法都会影响两个小部件,例如,假设我们有一个可调光的灯,我们可以打开或关闭,也可以调暗灯光亮度,这就是我所说的情况 我试图在Switch小部件上使用事件setOnCheckedChanged,但问题是,当我移动seekbar以更改Dim时,我必须更改开关的检查状态,在执行此操作时,小部件再次触发了setOnCheckedChanged
setOnCheckedChanged
,但问题是,当我移动seekbar以更改Dim时,我必须更改开关的检查状态,在执行此操作时,小部件再次触发了setOnCheckedChanged事件,因此我得到了类似loop的东西
我的问题是,有没有办法将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的代码:
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);
}
}
您可以将侦听器创建为对象,而不是方法参数,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);
}
}
然后在影响第一个侦听器的另一个小部件侦听器中,设置null listener,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);
}
});
希望对您有所帮助非常感谢您的回答,我用您的部分答案解决了问题,我只需要使用
sw_dimmable.setoncheckedchangedlistener(null)方法LoadInputFields()
中的code>,一切都按预期工作。感谢againI用解决方案更新我的问题,再次感谢您的时间事实上,如果有帮助,您可以投票给我的答案)在我看来这是这项服务声誉的原因)祝您好运