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