gpt4 book ai didi

android - 如何区分 Switch、Checkbox 值是由用户更改还是以编程方式(包括保留)更改?

转载 作者:IT老高 更新时间:2023-10-28 13:05:13 25 4
gpt4 key购买 nike

setOnCheckedChangeListener(new OnCheckedChangeListener() {
@Override
public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
// How to check whether the checkbox/switch has been checked
// by user or it has been checked programatically ?

if (isNotSetByUser())
return;
handleSetbyUser();
}
});

isNotSetByUser()方法如何实现

最佳答案

答案 2:

一个非常简单的答案:

在 OnClickListener 上使用而不是 OnCheckedChangeListener

    someCheckBox.setOnClickListener(new OnClickListener(){

@Override
public void onClick(View v) {
// you might keep a reference to the CheckBox to avoid this class cast
boolean checked = ((CheckBox)v).isChecked();
setSomeBoolean(checked);
}

});

现在您只需获取点击事件,无需担心程序更改。


答案 1:

我创建了一个封装类(参见装饰器模式),它以封装的方式处理这个问题:

public class BetterCheckBox extends CheckBox {
private CompoundButton.OnCheckedChangeListener myListener = null;
private CheckBox myCheckBox;

public BetterCheckBox(Context context) {
super(context);
}

public BetterCheckBox(Context context, CheckBox checkBox) {
this(context);
this.myCheckBox = checkBox;
}

// assorted constructors here...

@Override
public void setOnCheckedChangeListener(
CompoundButton.OnCheckedChangeListener listener){
if(listener != null) {
this.myListener = listener;
}
myCheckBox.setOnCheckedChangeListener(listener);
}

public void silentlySetChecked(boolean checked){
toggleListener(false);
myCheckBox.setChecked(checked);
toggleListener(true);
}

private void toggleListener(boolean on){
if(on) {
this.setOnCheckedChangeListener(myListener);
}
else {
this.setOnCheckedChangeListener(null);
}
}
}

CheckBox 仍然可以在 XML 中声明为相同,但在代码中初始化 GUI 时使用它:

BetterCheckBox myCheckBox;

// later...
myCheckBox = new BetterCheckBox(context,
(CheckBox) view.findViewById(R.id.my_check_box));

如果您想从代码中设置检查而不触发监听器,请调用 myCheckBox.silentlySetChecked(someBoolean) 而不是 setChecked

关于android - 如何区分 Switch、Checkbox 值是由用户更改还是以编程方式(包括保留)更改?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9129858/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com