Я знаю, что это похоже на дублированный вопрос, но я действительно не смог найти хороший ответ по соответствующей теме.
Есть много вопросов о том, как лучше всего обрабатывать событие OnClick
Button
.
Вот некоторые из вариантов, с которыми я столкнулся:
1 - программно программировать метод прослушивания OnCreate
:
button.setOnClickListener(new OnClickListener(){
@Override
public void onClick(View v) {
//do stuff
}
});
2 - Установка свойства android:OnClick
в XML:
<Button android:id="@+id/btnDelete"
...
android:OnClick="btnDelete_OnClick"/>
3 - Внедрение интерфейса OnClickListener
в классе Activity
и передача собственной ссылки на кнопку:
public class MainActivity extends Activity implements OnClickListener{
@Override
public void onClick(View v) {
//do stuff
}
protected void onCreate(Bundle savedInstanceState) {
...
button.setOnClickListener(this);
}
}
4 - Создайте поле с типом OnClickListener
:
private OnClickListener onClickHandler = new OnClickListener(){
@Override
public void onClick(View v) {
//stuff
}
};
protected void onCreate(Bundle savedInstanceState) {
...
button.setOnClickListener(onClickHandler);
}
Когда дело доходит до события Button
и OnClick
, я всегда предпочитаю его определять в XML, он просто более чистый.
Но как насчет других событий, таких как OnItemClick
из ListView
или OnTimeSet
из TimePickerDialog
? Нет свойства, которое я могу увидеть для его настройки в XML. Я считаю, что реализация интерфейса Listener - довольно чистое решение, но это означало бы, что я могу только реализовать его один раз, и если у меня будет два равных представления, мне придется обрабатывать их события в одном и том же месте. Если я использую опцию 2 или 4, она, вероятно, будет довольно запутанной при обработке нескольких событий из разных представлений из пользовательского интерфейса.
Я хотел бы видеть другие мнения по этому вопросу, если есть другие варианты реализации для обработки событий. Есть ли альтернатива, которая может быть определена как лучшая, или это просто личное дело каждого программиста?