【问题标题】:Classifier does not have a companion object, and thus must be initialized hereClassifier 没有伴生对象,因此必须在这里初始化
【发布时间】:2019-04-27 18:46:19
【问题描述】:

我有一个声明了接口的 Activity,我有一个 ViewModel 类,该类具有重写的接口,并希望从 Activity 调用接口的方法以在 ViewModel 类中进行更改,但无法调用其中的方法ActivityViewModel 类没有伴生对象,因此必须在这里初始化。如何解决?

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
        }
    }
}

【问题讨论】:

    标签: android kotlin interface


    【解决方案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,它在ActivityViewModel类中使用,activity中有一个dialog,在@987654331 @ on button click 我想反向选择RecycleView 项目和RowSubTShirtViewModelviewModel 的匹配者@ 987654335@,所以我如何管理RowSubTShirtViewModel 的构造函数在Acitivty
      • 这只是一个经典的依赖问题。你只是继续传递一切,直到你拥有你需要的一切。例如,如果您在适配器中构造RowSubTShirtViewModel,它在活动中使用,那么您可以在实例化适配器时传递活动,然后在实例化RowSubTShirtViewModel 时传递它。还有其他使用依赖注入框架的方法,例如 Dagger。我真的不能告诉你什么最适合你,但你遇到的问题总是会导致不得不构建RowSubTShirtViewModel
      • 谢谢 Fred 我会看看这两个解决方案。
      猜你喜欢
      • 2019-12-29
      • 1970-01-01
      • 2021-03-01
      • 2019-03-15
      • 1970-01-01
      • 2017-10-29
      • 2016-03-18
      • 2018-02-25
      • 2019-07-23
      相关资源
      最近更新 更多