Обязательно ли создавать внутренние классы для обработки событий в привязке данных?

#java #android #android-databinding

#java #Android #android-привязка данных

Вопрос:

Я изучал привязку данных, в частности раздел об обработке событий и событиях щелчка. Теперь, я заметил в нескольких уроках YouTube, что мои преподаватели в основном использовали внутренний класс для обработки этих событий. Однако ранее я написал этот код, который реализовал представление.OnClickListener и напрямую позволили мне обрабатывать события щелчка.

Вот оно:

 public class MainActivity extends AppCompatActivity implements View.OnClickListener {
 
    private ActivityMainBinding activityMainBinding;
 
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        activityMainBinding = DataBindingUtil.setContentView(this, R.layout.activity_main);
        activityMainBinding.enterButton.setOnClickListener(this);
    }
 
    @Override
    public void onClick(View view) {
        if (view == activityMainBinding.enterButton) {
            String name = activityMainBinding.nameEditText.getText().toString();
            String email = activityMainBinding.emailEditText.getText().toString();
            String country = activityMainBinding.countryEditText.getText().toString();
 
            User user = new User(name, email, country);
            activityMainBinding.setUser(user);
        }
    }
}
  

И это работает.

Мне было интересно, не считается ли эта форма обработки событий щелчка хорошей практикой? Я проверил еще несколько руководств, и все они использовали внутренние классы, тем самым вызывая это сомнение.

Спасибо за любую помощь.

Комментарии:

1. Вопрос: Необходимо ли создавать внутренние классы? О: Нет, абсолютно нет. Это просто полезное соглашение 🙂

2. Итак, если я обрабатываю события так, как я сделал выше, то есть без внутреннего класса, это не будет считаться плохой практикой?

3. @ArpanSircar, дело в том, onClick что of MainActivty ничего не говорит о том, какой кнопке она принадлежит. Это определенно может запутать ситуацию в более сложных примерах, поэтому многие люди могут просто по привычке создавать выделенные классы обработчиков только по этой причине.

Ответ №1:

Вопрос: Необходимо ли создавать внутренние классы?

О: Нет, абсолютно нет. Это просто полезное соглашение 🙂

Вопрос: Это форма обработки событий щелчка… хорошая практика?

A: В общем, любой отдельный «класс» должен делать «одну вещь». Свойства класса и его методы должны соответствовать «абстракции» класса.

Например, класс «Automobile», вероятно, не должен иметь метод «onClick ()». Даже если ваша реализация класса «Automobile» может иметь «button» с методом «onClick ()».

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

Однако в вашем примере я не вижу никаких проблем. Выглядит нормально 🙂

Комментарии:

1. Понял. Спасибо за это подробное объяснение.