能否创建一个OnClickListener来处理ToggleButton和Switch?

3
我正在开发一个应用程序,需要与 Android 4.0 以前的设备兼容。在 4.0 之前的布局中,我必须使用 ToggleButton,在 4.0 及之后则使用 Switch。就用户而言,两者的功能相同。当它们被点击时,应具有相同的行为。
我尝试编写一个 OnClickListener,使其适用于这两种按钮,以避免重复编写大量代码。Switch/ToggleButtons 在 Fragment 中使用,因此不能仅通过在布局中放置对 onClickListener 的调用来实现。
为了让 Switch 和 ToggleButton 都能够使用 onClickListener,我将其设置为 pushSelector,即:
private View.OnClickListener pushSelector = new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            if (((ToggleButton) v).isChecked() || ((Switch) v).isChecked()) {
                // code
            } else {
                // code
            }
        }
    };

毫不意外,这并没有起作用,但我想试一试。

是否可能拥有一个单一的onClickListener来处理ToggleButtonSwitch,或者我需要为每个设立一个onClickListener


使用switch case语句通过与isinstanceof()进行比较来检查所选视图。 - karan
不是很好的做法,但您可以通过为ToggleButton实现点击监听器并以编程方式处理这些控件的状态来完成它。 - Qasim Khokhar
1个回答

3
考虑使用OnCheckedChangeListener,因为Switches和ToggleButtons都是从CompoundButton继承而来。请注意,如果您从代码中调用(button).setChecked(boolean),这个回调函数也会被调用!如果您需要从代码中设置按钮是否选中,请像这样操作:
button.setOnCheckedChangeListener(null);
button.setChecked(boolean);
button.setOnCheckedChangeListener(mButtonChangeListener);

完美。像魔法一样运行。谢谢。 - JMGoodwin

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接