#android #view #android-architecture-components #android-viewmodel #android-mvvm
Вопрос:
В моем приложении много действий. Каждое действие имеет множество элементов пользовательского EditText
интерфейса, таких как TextView
, DatePicker
, и т.д. DropDown
Действие содержит как статические компоненты (представления, статически размещенные в xml-макете), так и динамические компоненты (представления, добавляемые во время выполнения на основе бизнес-логики и ответа API). Элементы пользовательского интерфейса, которые будут добавлены в действие, являются динамическими. Какие все элементы пользовательского интерфейса необходимо добавить, зависит от ответа API.
Я подумываю о написании метода, который принимает информацию о том, какие все представления должны быть добавлены в качестве параметра, создает представление и возвращает его как a LinearLayout
со всеми добавленными дочерними представлениями.
В приведенном ниже фрагменте кода rowBuilder-это класс данных, в котором хранится информация о представлениях, которые будут добавлены во время выполнения. Метод построит вертикаль linearLayout
со всеми необходимыми видами и вернет ее.
fun getUIFields(context: Context, rowBuilderList: ArrayList<RowBuilder>): LinearLayout {
val rootVerticalLinearLayout: LinearLayout = getRootVerticalLinearLayout(context)
for(i in 0 until rowBuilderList.size) {
val horizontalLinearLayout = getHorizontalLinearLayout(context)
for (j in 0 until rowBuilderList[i].columnBuilderList.size) {
val formFieldInfo = rowBuilderList[i].columnBuilderList[j].formFieldInfo
if (formFieldInfo.formFieldType == FormFieldType.EDIT_TEXT) {
addEditText(formFieldInfo, horizontalLinearLayout, context, i.toString() j.toString())
} else if (formFieldInfo.formFieldType == FormFieldType.DATE_PICKER) {
addEditTextForDatePicker(formFieldInfo, horizontalLinearLayout, context, i.toString() j.toString())
}
}
rootVerticalLinearLayout.addView(horizontalLinearLayout, i)
}
return rootVerticalLinearLayout
}
Где я могу разместить приведенную выше логику, которая требует контекста? Я знаю , что у нас есть AndroidViewModel
, где я могу использовать контекст. Кроме того, если я напишу вышеприведенную логику ViewModel
, один и тот же код должен быть продублирован в каждом viewmodels
. Мне нужно знать о более эффективном подходе с использованием MVVM
Пожалуйста, помогите!
Комментарии:
1. сначала я бы поместил этот фрагмент кода в действия/фрагменты. Я не вижу никаких причин, по которым это могло бы быть в viewmodel. И во-вторых, может быть, вы могли бы сделать эту функцию расширением активности, чтобы использовать ее повторно?