Classifier 没有伴生对象,因此必须在这里初始化
Posted
技术标签:
【中文标题】Classifier 没有伴生对象,因此必须在这里初始化【英文标题】:Classifier does not have a companion object, and thus must be initialized here 【发布时间】:2019-04-27 18:46:19 【问题描述】:我有一个声明了接口的 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
【问题讨论】:
【参考方案1】:就我而言,我在ApplicationModule
中为dagger2
收到此错误。
@Provides
@Singleton
internal fun providesxx(xx: xxx): xx
return xx
我只是重命名参数!
【讨论】:
【参考方案2】:这一行selection=RowSubTShirtViewModel
引用视图模型,就好像它是一个命名对象,这意味着您应该编写而不是类对象:
object RowSubTShirtViewModel
//...
但是,既然情况并非如此,kotlin 会告诉您不能那样引用它,必须对其进行初始化。构造函数有很多参数让我猜测它们是什么,但本质上你必须将它们传递进去:
selection=RowSubTShirtViewModel(/*parameters here*/)
【讨论】:
我明白你的意思。但其他问题必须面对,实际上这个RowSubTShirtViewModel
是subAdapter
类的viewmodel
,它在Activity
的ViewModel
类中使用,activity
中有一个dialog
,在@987654331 @ on button click 我想反向选择RecycleView
项目和RowSubTShirtViewModel
是viewModel
的匹配者@ 987654335@,所以我如何管理RowSubTShirtViewModel
的构造函数在Acitivty
这只是一个经典的依赖问题。你只是继续传递一切,直到你拥有你需要的一切。例如,如果您在适配器中构造RowSubTShirtViewModel
,它在活动中使用,那么您可以在实例化适配器时传递活动,然后在实例化RowSubTShirtViewModel
时传递它。还有其他使用依赖注入框架的方法,例如 Dagger。我真的不能告诉你什么最适合你,但你遇到的问题总是会导致不得不构建RowSubTShirtViewModel
。
谢谢 Fred 我会看看这两个解决方案。以上是关于Classifier 没有伴生对象,因此必须在这里初始化的主要内容,如果未能解决你的问题,请参考以下文章