setOnClickListener (new OnClickListener () {}) - PullRequest
8 голосов
/ 06 марта 2012
package android.example;

import android.app.Activity;

import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.Toast;

public class Android_eg1 extends Activity {
    Button bt; 
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
        bt=(Button)findViewById(R.id.click);
        bt.setOnClickListener(new OnClickListener(){
            public void onClick(View v) {
            // TODO Auto-generated method stub
                Toast.makeText(getApplicationContext(), "You made a mess", Toast.LENGTH_LONG).show();
            }

        });
      } //onCreate()

}//class

Я новичок в Java, и я знаю основы ядра Java.Это пример программы, которую я пытался узнать об обработке событий с помощью класса кнопки.Я не мог понять эту часть:

"bt.setOnClickListener(new OnClickListener(){
        public void onClick(View v) {
        // TODO Auto-generated method stub
            Toast.makeText(getApplicationContext(), "You made a mess", Toast.LENGTH_LONG).show();
        }

    });"

Внутри setOnClickListener (параметр), почему они дают определение функции? (Public void onClick (View v)})

Это приемлемо?

Ответы [ 5 ]

6 голосов
/ 06 марта 2012

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

3 голосов
/ 06 марта 2012

Нажатие кнопки является дескриптором события. Вы можете четко понимать разницу, если вы реализуете OnClickListner, а не используете в своем примере кода. При реализации OnClickListner в вашей среде IDE появляется возможность использовать нереализованные методы, связанные с интерфейсом OnClickListner. Там вы можете увидеть public void onClick метод. Если я суммирую сценарий,

  • У вас есть кнопка
  • У вас должен быть интерфейс, который прослушивает события кнопки - OnClickListner
  • Установите событие кнопки для прослушивания пользовательских событий - button.setOnClickListner(this)
  • Что вы хотите сделать после того, как событие входит в метод onClick

Этот полный пример кода может дать вам четкое представление об этом.

3 голосов
/ 06 марта 2012

setOnClickListener принимает объект OnClickListener в качестве параметра. В основном это создает анонимный подкласс OnClickListener в параметре.

То же самое в Java, когда вы можете создать новый поток с анонимным подклассом, например:

Thread t = new Thread(new Runnable()
    {     
        public void run(){...}
    });
2 голосов
/ 28 декабря 2012

OnclickListener - это интерфейс (Listener), а setOnClickListener () - метод, которому нужен объект типа onClickListener.Мы можем создать класс анонимно.то есть, путем вызова класса без имени (ANONYMOUS CLASS DECLARATION) , который реализует OnClickListener и, таким образом, ему придется реализовать метод void onClick.Таким образом, у нас будет объект типа interface, и он используется для упрощенного программирования.Для получения дополнительной информации об анонимном классе, пожалуйста, посетите http://www.techartifact.com/blogs/2009/08/anonymous-classes-in-java.html

0 голосов
/ 01 февраля 2015

Функция setOnClickListener с параметром типа OnClickListener ()

OnClickListener () - это интерфейс: (аналог абстрактного базового класса c ++)

код:

    bt.setOnClickListener(new OnClickListener()

    /* this is the definition of anonymous class which implements OnClickListener() */    
  /*  equivalent to : 
class OnClickListener_implementation implements OnClickListener */  
    {
            public void onClick(View v)
                         {
                            //your code here
                           }

    );

Это означает: создать объект класса, который реализует интерфейс OnClickListener, объявив onClick, как указано

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...