2016-09-18 2 views
1

Я новичок в разработке Android, и я понял, что гораздо труднее использовать все интерфейсы в реальных примерах мира, чем использовать их только в примерах кодов, которые пытаются показать вам, как использовать интерфейс.setOnClickListener анонимный класс?

Так как я хотел бы понять каждую строчку я печатаю Начну с этим:

Button clearButton = (Button) findViewById(R.id.buttonClear); 

clearButton.setOnClickListener(new View.OnClickListener() { 
    @Override 
    public void onClick(View v) { 
    } 
}); 

Первая линия проста, я просто назначить кнопку для объекта кнопки на основе его идентификатор из XML но слушатель Я не понимаю, просто я получаю объект clearButton, и я буду использовать один из его методов: setOnClickListener, а затем в аргументе передаю анонимный класс, поведение которого я бы хотел переопределить, но View.OnClickListener() - это метод, а не объект? Я пишу класс внутри функции?

new View.OnClickListener() { 
    @Override 
    public void onClick(View v) { 
    } 

это выглядит, как будто это функция OnClickListener, которая содержит встроенный класс так?

+0

Пожалуйста, смотрите на [Java учебник о анонимных классов] (https://docs.oracle.com/javase/tutorial/java/javaOO/anonymousclasses.html). – SOFe

+0

'View.OnClickListener()' - это конструктор, который вы вызываете в анонимный класс. – 4castle

+0

и им передается новый класс внутри конструктора? –

ответ

1

Это называется шаблон наблюдателя. Вы регистрируете своего слушателя в пользовательском интерфейсе и говорите ему, чтобы он вызывал ваш код, когда что-то происходит; в этом случае что-то пользователь нажимает кнопку очистки.

SO:

Это просто, вы создаете объект кнопки и прикрепление его файл макета.

Button clearButton = (Button) findViewById(R.id.buttonClear); 

Следующая:

Позвольте мне переписать так:

clearButton.setOnClickListener(new View.OnClickListener() { 
     @Override 
     public void onClick(View v) { 
     } 
    }); 

к этому:

//First let's create an implementation of this interface. 
// These are also refereed to as callback interfaces as 
//the methods in their implementation are called as whenever 
//something happens on the UI. In this call onClick is the callback method. 


private class MyButtonClicklistener implements View.OnClickListener 
{ 
    @Override 
      public void onClick(View v) 
{ 
//Do something on the button click 
      } 

} 

Создать экземпляр вашего слушателя

MyButtonClickListener mListener = new MyButtonClickListener(); 

Завершите регистрацию слушателя. Теперь вы говорите своему пользовательскому интерфейсу, чтобы вызвать метод onClick объекта mListener всякий раз, когда кто-то нажимает кнопку очистки.

clearButton.setOnClickListener(mListener); 
+0

Я никогда не видел интерфейса, который содержит точку в его имени, я не понимаю, что реализует View.OnClickListener как реализацию точной переменной, например, int из интерфейса представления? –

+0

Посмотрите на этот ответ http://stackoverflow.com/a/6947033/1099142 и особенно комментарий для этого ответа. – nitinsh99

Смежные вопросы