Apply中的“ kotlin-android-extensions”查找ID为空

时间:2019-06-10 10:16:28

标签: android kotlin kotlin-android-extensions

当我使用apply时,“ kotlin-android-extensions”的查找ID为空

   private val nickDialog: NickDialog by lazy {
        NickDialog(this@AccountInformationActivity).apply {
            this.setOnClickConfirmListener {
                account_nick.setRightText(it)
                this.dismiss()
            }
        }
    }
  

java.lang.NullPointerException:尝试在空对象引用上调用虚拟方法'void com.cnjnb.wealthstorm.view.TextLineView.setRightText(java.lang.String)'。

但是当我使用它时,就可以了。

    private val nickDialog: NickDialog by lazy {
        val a = NickDialog(this@AccountInformationActivity)
        a.setOnClickConfirmListener {
            account_nick.setRightText(it)
            a.dismiss()
        }
        a
    }

XML: account_nick是我的XML中的view'id

其中一部分是:

  <com.cnjnb.wealthstorm.view.TextLineView
        android:id="@+id/account_nick"
        android:layout_width="match_parent"
        android:layout_height="50dp"
        app:layout_constraintTop_toBottomOf="@id/account_profession"
        app:leftText="nick"
        app:rightText="bright" />

1 个答案:

答案 0 :(得分:0)

您问题的根源似乎是account_nick属性。在insinde对话框apply中调用它时,将为其执行代码-他试图在对话框中查找该视图。在活动视图中,此处为空。

为避免这种情况,您可以将this@YourActivityClass放在account_nick通话之前。

private val nickDialog: NickDialog by lazy {
    NickDialog(this@AccountInformationActivity).apply {
        this.setOnClickConfirmListener {
            this@AccountInformationActivity.account_nick.setRightText(it)
            this.dismiss()
        }
    }
}