Android setOnClickListener метод - как это работает?
У меня проблемы с пониманием этого кода. Я получаю, что findViewById
получит виджет кнопки, а затем его приведёт. Затем он будет использовать кнопку для вызова метода setOnClickListener
. Однако я не знаю, что это за аргумент, передаваемый в setOnClickListener
и я никогда раньше не видел подобного кода. Как получается, что он создает новый объект, но способен создать собственный метод в другом аргументе метода? Было бы здорово, если бы кто-то мог это объяснить. Кроме того, какой тип объекта setOnClickListener
метод 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));
}
});
Ответы
Ответ 1
Это работает так. View.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
.
Ответ 2
Это лучший способ реализовать Onclicklistener для многих кнопок подряд, реализующих View.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;
}
}
Ответ 3
В этом руководстве говорит о методе setOnClickListener
:
public void setOnClickListener (View.OnClickListener l)
Добавлен в уровень API 1 Зарегистрировать обратный вызов, который будет вызываться, когда этот вид щелчок. Если это представление не доступно для кликов, оно становится интерактивным.
Параметры
l View.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.
Ответ 4
это реализация создания объекта класса anonymouse, чтобы облегчить написание кода и сэкономить время