Могу ли я использовать статический метод для добавления OnClickListener в Java

Можно ли добавить onClickListener в статический метод?

Я пытаюсь создать вспомогательный класс и внести некоторые общие изменения в Crouton (реализация Бена Вейса, основанная на статье Кирилла Моттье). У меня действительно была разветвленная версия (где я изменил исходный код), но я пытаюсь сократить библиотечные проекты, от которых я зависел, вместо этого выбрав включить флягу, которую он предоставляет в Maven, но класс установлен как final поэтому я не могу продлить это оттуда.

Что я сделал, это:

public class CroutonEx {

    static Crouton crouton;

    ...

    public static Crouton makeDismissOnClick(Crouton crouton) {
        CroutonEx.crouton = crouton;
        return crouton.setOnClickListener(new View.OnClickListener() {            
            @Override
            public void onClick(View v) {
                Crouton.hide(CroutonEx.crouton);                
            }
        });
    }
}

Мои вопросы:

  • когда onClick(View v) будет запущен, будет ли он скрывать гренок, хранящийся в данный момент в CroutonEx.crouton или тот, на который он ссылался в тот момент, когда слушатель был зарегистрирован? То есть, в моем случае, это всегда будет один и тот же (Crouton отображается сразу после установки слушателя, и только в течение нескольких секунд, и только по одному за раз), но гарантируется ли это в общем случае (с в отношении какого объекта в памяти он будет ссылаться)?

  • даже если это работает, это явно не идеальный способ; хотя я сомневаюсь, что это вызовет проблему в данном конкретном случае (я не могу думать о том, как несколько потоков будут обращаться к этому методу одновременно (гренки будут добавляться только в основной поток / поток пользовательского интерфейса)), есть ли лучший способ добавить слушателей в служебный класс, или это вообще не рекомендуется?

Спасибо!

(Хотя это для проекта Android, я не добавил тег, так как не думал, что он уместен.)

0 ответов

Другие вопросы по тегам