Должны ли мы использовать butterknife или findViewById () с проектом Kotlin Android, поскольку мы можем напрямую обращаться к представлениям по id - PullRequest
0 голосов
/ 15 октября 2019

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

Итак, нужно ли нам использовать findviewbyId () или библиотеку butterknife в проекте android kotlin?

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
                    )
                )

    }
}
}```

Ответы [ 3 ]

0 голосов
/ 15 октября 2019

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 во время сборки, потому что он не использует процессоры аннотаций.

0 голосов
/ 15 октября 2019

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

0 голосов
/ 15 октября 2019

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

...