我制作了一个带有 3 个切换按钮的自定义 View 。在我设置的自定义 View 类中
public void setMyToggleButton1OnCheckedChangedListener(CompoundButton.OnCheckedChangeListener o) {
myToggleButton1.setOnCheckedChangeListener(o);
}
但是当我尝试在我的主要 Activity 中处理这个问题时,看起来这个事件从未被触发。在我尝试的主要 Activity 中
myCustomView.setMyToggleButton1OnCheckedChangedListener(new CompoundButton.OnCheckedChangeListener() {
@Override
public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
if (isChecked) {
//TODO something here
}
else {
//TODO something here
}
}
});
我确实尝试了使用常规按钮的其他自定义 View ,并使用相同的方法将标准按钮单击事件传递给它。我不明白将标准按钮单击事件传递到自定义 View 和将切换按钮 checkchange 事件监听器传递到自定义 View 有何不同。
PS:这是我对常规按钮及其 OnClickListener 所做的操作。这个按照我的预期工作,这就是为什么我尝试将它复制到 Toggle Button 和 OnCheckedChangeListener。
在 myCustomView2 中(自定义 View 包含常规按钮)
public class myCustomView2 extends ConstraintLayout{
private Button myRegBtn1;
...
public myCustomView2(Context context) {
this(context, null);
}
public myCustomView2(Context context, AttributeSet attrs) {
this(context, attrs, 0);
setAttributes(context, attrs);
}
public myCustomView2(Context context, AttributeSet attrs, int defStyleAttr) {
super(context, attrs, defStyleAttr);
setAttributes(context, attrs);
init(context);
}
private void init(Context context) {
myRegBtn = findViewById(R.id.btn1);
...
}
private void setAttributes(Context context, AttributeSet attrs) {
...
}
public void setMyRegBtnOnClickListener(OnClickListener o) {
myRegBtn.setOnClickListener(o);
}
}
在我的 mainActivity 中,
public class myMainActivity extends AppCompatActivity{
private MyCustomView2 myCustomView2;
@Override
protected void onCreate(@Nullable Bundle savedInstanceState) {
...
myCustomView2.setMyRegBtnOnClickListener(new View.OnClickListener(){
@Override
public void onClick(View view) {
//TODO: some code execute here when button clicked
}
});
...
}
最佳答案
您需要自己调用 CheckedChangeListener
即lister.onCheckedChange(isChecked)
只有当您扩展 CheckBox View 时,它才能开箱即用。
关于java - 如何将 CheckedChange Listener 传递给自定义 View ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60230546/