Android - задержка toggleButton с собственным OnClickListener

У меня проблема с нежелательной задержкой после нажатия на toggleButton с использованием собственного 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 ведет себя так же.


person ThinkDeep    schedule 06.09.2013    source источник
comment
@iDroidExplorer хорошо, я не нашел ничего на TogglechangeListener. И мне не нужно щелкать по событию, как я уже говорил в последнем сентенсе - OnCheckChangeListener не работает, как я надеялся.   -  person ThinkDeep    schedule 06.09.2013
comment
Да, извините, пожалуйста, проверьте мой ответ ниже.   -  person Shreyash Mahajan    schedule 06.09.2013


Ответы (2)


См. пример разработчика.

Вы можете реализовать что-то вроде ниже:

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

    if (on) {
        // Enable vibrate
    } else {
        // Disable vibrate
    }
}
person Shreyash Mahajan    schedule 06.09.2013
comment
Ну, я прочитал этот пример, но я не знаю, как это может мне помочь? Мне все еще нужно поместить этот метод в прослушиватели OnClick или OnCheckChange, верно? Но событие произошло с опозданием. Или я что-то недосмотрел? - person ThinkDeep; 06.09.2013

Поискав ошибки и протестировав другие варианты, я обнаружил, что задержка вызывается не 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();
    }
});

Я не знаю, зачем этот журнал, но я использовал их только для отладки, так что проблема решена!

person ThinkDeep    schedule 06.09.2013