Я создаю класс BaseView в Kotlin, который будет расширяться всеми моими дочерними представлениями.
Моя проблема заключается в раздувании макета в классе BaseView, поскольку идентификатор ресурса макета предоставляется конструктору BaseView слишком поздно.
Вот мой BaseView
abstract class BaseView @JvmOverloads constructor(
context: Context?,
attributeSet: AttributeSet? = null,
defStyleAttr: Int = 0
) : MaterialCardView(context, attributeSet, defStyleAttr) {
protected abstract val viewResourceId: Int
protected abstract val needsRefresh: Boolean
init {
View.inflate(context,viewResourceId, this) // viewResourceId is not initialized here as yet
}
enum class State {
DISABLED,
LOADING,
DONE,
FAILED
}
}
Проблема заключается в хорошо известном "доступе к неконечному свойству в конструкторе".Ранее я применял точно такую же стратегию в Java, и это работало.
Как бы я поступил в этой ситуации?,Мне нужно раздуть мой макет в базе.Это имеет смысл, потому что инфляция является обычной операцией.
Является ли делегированное имущество подходящим способом?
РЕДАКТИРОВАТЬ: Так выглядит мой клиент
class StudentView @JvmOverloads constructor(
context: Context?,
attributeSet: AttributeSet? = null,
defStyleAttr: Int = 0
) : BaseRegion(context, attributeSet, defStyleAttr) {
override val viewResourceId=R.layout.student_view
override val needsRefresh=false
init {
context?.
let { setCardBackgroundColor(ContextCompat.getColorStateList(context,R.color.colorAccent)!!)}
}
}