web-dev-qa-db-ja.com

分類子にはコンパニオンオブジェクトがないため、ここで初期化する必要があります

インターフェイスが宣言されているアクティビティがあり、インターフェイスをオーバーライドした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
        }
    }
}
3
Farhana

この行selection=RowSubTShirtViewModelは、名前付きオブジェクトのようにビューモデルを参照します。つまり、クラスオブジェクトの代わりに記述したことになります。

object RowSubTShirtViewModel {
   //...
}

ただし、そうではないため、kotlinはそのように参照することはできず、初期化する必要があることを通知しています。それらが何であるかを推測するためのかなり多くのパラメーターとしてのコンストラクターですが、基本的にはそれらを渡す必要があります:

selection=RowSubTShirtViewModel(/*parameters here*/)
3
Fred