java - 如何将 CheckedChange Listener 传递给自定义 View

标签 java android android-custom-view event-listener

我制作了一个带有 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/

相关文章:

java - 在 Eclipse 中放置配置文件的正确位置

Java 变量最终

android - openCV 单应输出掩码值用作透视误差的内点?

java - android 如何设置viewpager只加载一页和setOffscreenPageLimit()

尝试模糊位图时出现android空指针异常

java - 为什么我需要 `{...}` 来填充类范围内的数组?

java - Android - 使用不同高度的 child 更新 ViewPager

android - 无法使用 Valgrind 运行 Java Android 程序

java - 在 AlertDialog 中显示自定义 View

android - 像listview一样鼓掌