У меня есть Activity, где интерфейс объявлен, и у меня есть класс ViewModel
которого есть переопределенный интерфейс, и я хочу вызвать метод интерфейса из Activity
чтобы внести изменения в класс ViewModel
но не могу вызвать метод в Activity
говоря, что у класса ViewModel нет компаньона. объект, и, следовательно, должны быть инициализированы здесь. Как решить это?
var selection: setSelectionSubRow? = null
selection=RowSubTShirtViewModel
selection!!.setNameSelection(false)
Код выше находится в Activity
, имя которой TShirtActivity
.
код ниже из класса RowViewModel
class RowSubTShirtViewModel(private val subTShirtAdapter: SubTShirtAdapter, val context: TShirtActivity,
val tShirtBean: CommonItemBean, private val parentPosition: Int, private val position: Int) : BaseObservable() ,TShirtActivity.setSelectionSubRow{
fun getImageDrawable(): Drawable {
return if (tShirtBean.isSelected)
ContextCompat.getDrawable(context, R.drawable.green_border_circle)!!
else
ContextCompat.getDrawable(context, R.drawable.border_circle)!!
}
override fun setNameSelection(selection: Boolean) {
if (parentPosition == 6) {
if (position == 1) {
tShirtBean.isSelected = false
}
}
}
Эта строка selection=RowSubTShirtViewModel
ссылается на модель представления, как если бы это был именованный объект, то есть вы бы написали вместо объекта класса:
object RowSubTShirtViewModel {
//...
}
Однако, поскольку это не так, kotlin говорит вам, что вы не можете ссылаться на него таким образом и должны его инициализировать. У кондуктора достаточно много параметров, чтобы я мог догадаться, что они из себя представляют, но по сути вам придется их передать:
selection=RowSubTShirtViewModel(/*parameters here*/)
RowSubTShirtViewModel
являетсяviewmodel
изsubAdapter
класса и его использования вViewModel
классеActivity
и естьdialog
вactivity
, вdialog
на кнопку мыши , я хочу отменить выборRecycleView
пункта иRowSubTShirtViewModel
являетсяviewModel
для adpater этогоrecyclerview
, так как я могу управлять конструкторомRowSubTShirtViewModel
вAcitivty
RowSubTShirtViewModel
в адаптере, который используется вRowSubTShirtViewModel
, то вы можете передать действие при создании экземпляра адаптера и затем передать его приRowSubTShirtViewModel
экземпляраRowSubTShirtViewModel
. Существуют и другие подходы, использующие инфраструктуры внедрения зависимостей, такие как Dagger. Я не могу сказать вам, что подходит вам лучше всего, но проблема, с которой вы сталкиваетесь, всегда приводит к необходимости созданияRowSubTShirtViewModel
.