Синтетическое представление Kotlin в действии становится нулевым, когда настраиваемое диалоговое окно отображается и закрывается - PullRequest
0 голосов
/ 13 февраля 2019

Я обновляю представление в методе действия onCreate, который работает нормально, используя расширение kotlin, как указано ниже.

Активность onCreate

import kotlinx.android.synthetic.main.activity_otpverification.*

     override fun onCreate(savedInstanceState: Bundle?) {
            super.onCreate(savedInstanceState)
            setContentView(R.layout.activity_otpverification)
            tvContactNumber.text = getString(R.string.dual_string_value_placeholder)
        }

Затем при нажатии кнопки я показываю пользовательскийдиалог для выполнения какого-либо действия.Когда диалог отклонен Я обновляю тот же textView в действии с данными, отправленными из диалога, но представление tvContact выдает нулевое исключение.

Активность onClick

override fun onClick(p0: View?) {
    when (p0?.id) {
        R.id.ivEdit -> {
            object : ChangeNumberDialog(this) {
                override fun onSubmitClicked(number: String) {
                    tvContactNumber.text =number
                }
            }.show()
        }
    }
}

onSubmitClicked - это абстрактный метод в диалоге, который запускается при закрытии диалога.

Ошибка из logcat:

    java.lang.IllegalStateException: tvContactNumber must not be null
            at com.beat.em.ui.activities.OTPVerificationActivity$onClick$1.onSubmitClicked
(OTPVerificationActivity.kt:211)

onCreate и onClick методы из ChangeNumberDialog :

 override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        val view = layoutInflater.inflate(R.layout.dialog_change_number, null, false)
        setContentView(view)
        setCanceledOnTouchOutside(false)
        setCancelable(true)
        tvSubmit.setOnClickListener(this)
    }

  override fun onClick(view: View) {
    when (view.id) {
        R.id.tvSubmit -> {
            onSubmitClicked(etNumber.text.toString().trim())
            dismiss()
          }
       }
  }

Я только начал использовать расширение kotlin и не смог понять причину.Помощь оценена.

1 Ответ

0 голосов
/ 28 февраля 2019

Переменная, к которой вы пытаетесь получить доступ, находится в другой области, попробуйте добавить явную область в представление, например

this@YourActivity.tvContactNumber.text = number
...