Метод Android setOnClickListener-как он работает?

у меня проблемы с пониманием этого кода. Я понимаю это findViewById получит виджет кнопки, а затем он бросит его. Затем он будет использовать кнопку для вызова setOnClickListener метод. Однако я не знаю, что это за аргумент передается в setOnClickListener и я никогда не видел такого кода раньше. Как получается, что он создает новый объект, но может создать собственный метод в аргументе другого метода? Было бы здорово, если бы кто-нибудь смог это объяснить. Кроме того, какой тип объекта the setOnClickListener метод принятия?

btn = (Button)findViewById(R.id.firstButton);
btn.setOnClickListener(new View.OnClickListener()
{
    @Override
    public void onClick(View v)
    {
        tv.setText(months[rand.nextInt(12)]);
        tv.setTextColor(Color.rgb(rand.nextInt(255)+1, rand.nextInt(255)+1, rand.nextInt(255)+1));
    }
});

3 ответов


как это работает. Вид.OnClickListenere определяется -

public interface OnClickListener {
    void onClick(View v);
}

насколько нам известно, вы не можете создать экземпляр объекта OnClickListener, поскольку у него нет реализованного метода. Таким образом, есть два способа - вы можете реализовать этот интерфейс, который переопределит onClick способ такой:

public class MyListener implements View.OnClickListener {
    @Override
    public void onClick (View v) {
         // your code here;
    }
}

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

setOnClickListener принимает View.OnClickListener в качестве параметра.


Это лучший способ реализовать Onclicklistener для многих кнопок подряд реализовать представление.onclicklistener.

public class MainActivity extends AppCompatActivity implements View.OnClickListener {

Это кнопка в MainActivity

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);

    bt_submit = (Button) findViewById(R.id.submit);

    bt_submit.setOnClickListener(this);
}

Это метод переопределения

    @Override
    public void onClick(View view) {
        switch (view.getId()){
            case R.id.submit:
                //action

                break;

            case R.id.secondbutton:
                //action
                break;
        }
    }

то, что руководство говорит о setOnClickListener метод:

public void setOnClickListener (View.OnClickListener l)

добавлено в API level 1 зарегистрируйте обратный вызов, который будет вызываться при этом представлении щелкает. Если это представление не кликабельно, оно становится кликабельным.

параметры

L вид.OnClickListener: обратный вызов, который будет выполняться

и обычно вы должны использовать его так

public class ExampleActivity extends Activity implements OnClickListener {
    protected void onCreate(Bundle savedValues) {
        ...
        Button button = (Button)findViewById(R.id.corky);
        button.setOnClickListener(this);
    }

    // Implement the OnClickListener callback
    public void onClick(View v) {
      // do something when the button is clicked
    }
    ...
}

взгляните на этот урок тоже создание простого калькулятора с помощью Android Studio.