Должны ли мы использовать Butterknife или findViewById() с проектом Kotlin Android, поскольку мы можем напрямую обращаться к представлениям по идентификатору

Я могу получить доступ к своим представлениям макета (например, кнопка, TextView, EditText и т. д.) непосредственно внутри действия по их идентификаторам, определенным в XML-файле макета в проекте Android Kotlin.

Итак, нужно ли нам использовать findviewbyId() или Butterknife lib в проекте Kotlin Android?

StudentActivity.kt


    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_main)
        val studentViewModel = getStudentViewModel()

        updateButton.setOnClickListener {
            val name = nameEditText.text.toString()
            val age = ageEditText.text.toString()
            val subject = subjectEditText.text.toString()

                studentViewModel.updateStudentRecord(
                    Student(
                        name,
                        Integer.parseInt(age),
                        subject
                    )
                )

    }
}
}```

person Rock    schedule 15.10.2019    source источник
comment
Вы можете использовать синтетический импорт. Я также использую его в пользу ButterKnife. Тем не менее, см. этот stackoverflow.com/a/58155708/3999808   -  person Zun    schedule 15.10.2019
comment
используйте DataBinding Лучше всего, а также привязка данных также используется для многих других вещей.   -  person Asad Ali    schedule 15.10.2019


Ответы (3)


ButterKnife — это старое решение для привязки представлений. В нем меньше шаблонного кода, чем в старом findviewbyId, но из-за annotation processors он влияет на скорость сборки и не предоставляет Null safety и Type safety. Лучшим решением является kotlinx.android.synthetic, который вы использовали в своем примере, но у него тоже есть некоторые проблемы. Например, если вы настроили представление содержимого на макет, а затем ввели идентификатор, который существует только в другом макете, IDE позволит вам выполнить автозаполнение и добавить новый оператор импорта. Если разработчик специально не проверяет, чтобы его операторы импорта импортировали только правильные представления, нет безопасного способа убедиться, что это не вызовет проблемы во время выполнения. Поскольку все является глобальным, нужно быть осторожным, чтобы убедиться, что они используют только представления, которые ожидают, и игнорируют автозаполнение. DataBinding и ViewBinding - лучшие решения на данный момент. Они похожи на первый взгляд. Оба создают классы привязки, которые можно использовать для прямой ссылки на представления с поддержкой Null safety и Type safety, но есть различия:

  • DataBinding требует, чтобы вы добавили тег <layout> в макет XML, чтобы активировать процесс привязки данных.
  • ViewBinding не поддерживает переменные макета или выражения макета, поэтому его нельзя использовать для привязки макетов к данным в XML.

ViewBinding быстрее, чем DataBinding во время сборки, поскольку не использует процессоры аннотаций.

person Squti    schedule 15.10.2019
comment
Да, вы правы, но привязка данных немного сложна в случае с CustomView. - person Rock; 22.10.2019
comment
Что вы имеете в виду под CustomView? @Камень - person Squti; 22.10.2019

Я думаю, что вы не будете использовать больше, просто если вы хотите? Но я считаю, что это не из-за синтетических аксессоров, а из-за привязки данных и анонсированного в этом году Просмотреть привязку

person DevSrSouza    schedule 15.10.2019

Нет, вот магия котлина. Просто используйте свой идентификатор из файла макета (xml) и используйте его напрямую. Например: button.setOnClickListener {} и так далее. надеюсь, это поможет.

person Saadat Sayem    schedule 15.10.2019