0

在使用自己的 OnClickListener 单击切换按钮后,我遇到了不必要的延迟问题。我通过这个关于 stackoverflow的建议来成为我的听众,如下所示:

public class ToggleButtonOnClickListener implements OnClickListener{

    private String _name;

    public ToggleButtonOnClickListener(String name) {
        _name = name;
    }

    @Override
    public void onClick(View v) {
        Log.i("toggle button clicked",_name);
    }
}

并使用这个:

toggle.setOnClickListener(new ToggleButtonOnClickListener(device.GetName()));

但它不会在第一次点击后触发 onClick 方法,而是在下一次点击。而且因为我有一组 toggleButtons 这很不开心,当我第一次单击时,onClick 方法在再次单击后触发,甚至在单击组中的第二个(或任何一个)后触发。OnCheckChangeListener 的行为相同。

4

2 回答 2

0

查找错误并测试其他选项后,发现延迟导致的不是Listener,而是日志语句。
所以,上面的代码运行良好,除了

Log.i("toggle button clicked",_name);

并且不需要使用 OnCheckedChangeListener 拥有自己的类(参数)的替代方法是:

toggle.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener(){
    @Override
    public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
        Toast.makeText(buttonView.getContext(), "test", Toast.LENGTH_LONG).show();
    }
});

我不知道为什么这个日志会这样做,但我只是将它们用于调试,所以问题解决了!

于 2013-09-06T10:56:33.863 回答
0

请参考开发者的例子

您可以实现如下所示:

 public void onToggleClicked(View view) {
    // Is the toggle on?
    boolean on = ((ToggleButton) view).isChecked();

    if (on) {
        // Enable vibrate
    } else {
        // Disable vibrate
    }
}
于 2013-09-06T09:05:55.610 回答