У классификатора нет сопутствующего объекта, и, следовательно, он должен быть инициализирован здесь

1

У меня есть 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
        }
    }
}
Теги:
kotlin
interface

1 ответ

2

Эта строка selection=RowSubTShirtViewModel ссылается на модель представления, как если бы это был именованный объект, то есть вы бы написали вместо объекта класса:

object RowSubTShirtViewModel {
   //...
}

Однако, поскольку это не так, kotlin говорит вам, что вы не можете ссылаться на него таким образом и должны его инициализировать. У кондуктора достаточно много параметров, чтобы я мог догадаться, что они из себя представляют, но по сути вам придется их передать:

selection=RowSubTShirtViewModel(/*parameters here*/)
  • 0
    Японял твою точку зрения. но и другие проблемы приходится сталкиваться, На самом деле это RowSubTShirtViewModel является viewmodel из subAdapter класса и его использования в ViewModel классе Activity и есть dialog в activity , в dialog на кнопку мыши , я хочу отменить выбор RecycleView пункта и RowSubTShirtViewModel является viewModel для adpater этого recyclerview , так как я могу управлять конструктором RowSubTShirtViewModel в Acitivty
  • 1
    Это просто классическая проблема зависимости. Вы просто продолжаете передавать все, пока не получите все, что вам нужно. Например, если вы RowSubTShirtViewModel в адаптере, который используется в RowSubTShirtViewModel , то вы можете передать действие при создании экземпляра адаптера и затем передать его при RowSubTShirtViewModel экземпляра RowSubTShirtViewModel . Существуют и другие подходы, использующие инфраструктуры внедрения зависимостей, такие как Dagger. Я не могу сказать вам, что подходит вам лучше всего, но проблема, с которой вы сталкиваетесь, всегда приводит к необходимости создания RowSubTShirtViewModel .
Показать ещё 1 комментарий

Ещё вопросы

Сообщество Overcoder
Наверх
Меню