【问题标题】:MVP + Dagger2 + Kotlin: lateinit property presenter has not been initializedMVP + Dagger2 + Kotlin:lateinit 属性 Presenter 尚未初始化
【发布时间】:2018-07-30 02:12:29
【问题描述】:

我将我的项目设置为 MVP 架构。我能够为MainActivityListAdapter 设置MVP。基本上我在ListAdapter 中有一个图像列表,当单击项目时,它将启动PhotoDetailActivity,我已经设置了PresenterView

ListAdapter.kt(完整要点here

override fun onBindViewHolder(holder: ListViewHolder, position: Int) {
    val photo = photos[position]
    holder.bind(photo)
    holder.itemLayout.setOnClickListener {
        listener.itemDetail(photo.id)
    }
    Glide
            .with(context)
            .load(photo.urls.regular)
            .into(holder.photo)
    Glide
            .with(context)
            .load(photo.user.profile_image.small)
            .into(holder.userAvatar)
}

PhotoDetailActivity.kt(完整要点here

lateinit var presenter: PhotoDetailContract.Presenter

override fun onCreate(savedInstanceState: Bundle?) {
    super.onCreate(savedInstanceState)
    setContentView(R.layout.activity_photo_detail)
    var photoId: String = intent.getStringExtra("photoId")

    injectDependency()
    presenter.attach(this)
    initView(photoId)
}

但它说:

kotlin.UninitializedPropertyAccessException: lateinit property presenter has not been initialized

我的完整代码是here

【问题讨论】:

标签: kotlin dagger-2 mvp onitemclicklistener


【解决方案1】:

像这样声明成员:

lateinit var presenter: PhotoDetailContract.Presenter

.. 表明这个引用将在构造函数运行后的某个时间点被初始化。但是,您似乎没有任何代码可以这样做。看了你的项目,我想你可能的意思是让 Dagger 注入那个实例。为此,您需要添加 @Inject 注释,如下所示:

@Inject lateinit var presenter: PhotoDetailContract.Presenter

【讨论】:

  • 好吧,我真傻,非常感谢braaaaaaaaaaaaaaa
猜你喜欢
  • 2018-11-06
  • 2019-12-15
  • 1970-01-01
  • 1970-01-01
  • 2020-09-23
  • 2023-03-25
  • 1970-01-01
  • 1970-01-01
  • 2019-12-02
相关资源
最近更新 更多