Подтвердить что ты не робот

View.OnClickListener, метод или класс?

Извините, если этот вопрос глуп, но я не могу окунуться в синтаксис Java. Я изучил C/С++
Я знаю, что View - класс, который хорош. Но я не понимаю, является ли View.OnClickListener() методом.
Я сомневаюсь в этом, если он не возвращает объект?
Я думаю, что View - это класс, у которого есть статический объект-член OnClickListener.. для меня это не имеет смысла.
Может ли кто-нибудь объяснить, что происходит с этой строкой кода?

button1 = (Button) findByView(R.id.button1)  ;
    button1.setOnClickListener(new View.OnClickListener()
    {
        public void onClick(View v)
        {

        }
    }

Итак, что происходит с этим кодом?

Button1 - ссылка на объект button1 в файле xml.

Button1 объект имеет объект-член setOnClickListener, который я из его имени предполагаю, инициализирует событие кнопкой или чем-то. Но он получает объект View.OnClicListener().

Я запутался в этом..onClick получает объект View, поэтому onClickListener не является объектом, возвращающим объект View? Я этого не понимаю.

Может кто-нибудь объяснить, что происходит в этой строке View.onClickListener(), это еще один способ сказать new this?

4b9b3361

Ответ 1

View.OnClickListener - это интерфейс, вы его не вызываете, а создаете его новый экземпляр (new View.OnClickListener() - вызов конструктора)

Созданный экземпляр представляет анонимный класс, который implements View.OnClickListener, в скобках справа под new View.OnClickListener()

Любой класс, реализующий View.OnClickListener, должен реализовать описанные в нем методы (например, onClick)

setOnClickListener просто сохраняет ссылку на экземпляр View.OnClickListener, который вы предоставили, и когда кто-то нажимает кнопку, метод onClick слушателя, который вы установили, получает вызов.

Ответ 2

OnClickListener - это интерфейс. Интерфейс предоставляет набор методов, которые могут реализовать другие классы. http://download.oracle.com/javase/tutorial/java/concepts/interface.html

У вас может быть другой класс (как и адаптер), который расширяет OnClickListener, тогда ваш класс Adapter может добавить метод "OnClick (View v)", и он также сможет обрабатывать события Click. Или вы можете использовать введенный вами код, где вы просто создаете анонимный класс, который реализует OnClickListener.

-Woody

Ответ 3

Код Android предназначен для ответов на основе событий. Блок кода выглядит следующим образом:

Найдите кнопку, добавленную в активный макет, и назначьте ее локальной переменной:

button1 = (Button) findByView(R.id.button1);

Установите кнопку включения для кнопки. Это класс, который будет вызываться, когда кнопка регистрирует событие. Класс построен здесь, он анонимный, поскольку вы не назначаете его переменной, но андроид будет отслеживать ссылку.

События кнопки всегда должны быть нажаты, поэтому, когда кнопка регистрирует, что она была нажата, она сообщит классу onClickListener, что даже произошло, и передается в качестве представления. OnClickListener сконструирован как:

new View.OnClickListener() 
{
    public void onClick(View v)
    {

    } 
}

Этот метод onClick используется слушателем для обработки события (в этом случае нажмите кнопку). Итак, вы бы поставили код, который вы хотели бы выполнить в этом методе.

Чтобы ответить на ваш вопрос напрямую, onClickListere является анонимным классом, который определяет метод onClick, который будет обрабатывать события кнопок.