как инициализировать привязку, чтобы быть свойством (android viewmodel)? - PullRequest
1 голос
/ 23 апреля 2020

Я хочу, чтобы привязка переменной была свойством, чтобы к ней могли обращаться все методы, но я не знаю, как ее инициализировать (kotlin)

 val binding: pendaftaranBinding=
        DataBindingUtil.inflate(inflater, R.layout.pendaftaran, container, false)

до

var binding: .........................
binding: pendaftaranBinding=
            DataBindingUtil.inflate(inflater, R.layout.pendaftaran, container, false)

Ответы [ 3 ]

3 голосов
/ 23 апреля 2020

, чтобы к нему могли обращаться все методы

Если я правильно понял, вы имеете в виду, что хотите получить доступ к переменной типа pendaftaranBinding в других методах, а затем просто объявить эта переменная в теле класса.

Пример:

class YourActivity : AppCompatActivity() {
     private lateinit var yourBinding: pendaftaranBinding

    override fun onCreate() {
       yourBinding = DataBindingUtil.inflate(inflater, R.layout.pendaftaran, container, false)
    }

    private fun yourOtherMethod() {
        yourBinding.yourView
    }
}
2 голосов
/ 23 апреля 2020
lateinit var binding: pendaftaranBinding

init {
   binding = DataBindingUtil.inflate(inflater, R.layout.pendaftaran, container, false)
}

или

Вы можете использовать связывающий делегат, пожалуйста, прочитайте: this , если вы хотите использовать val вместо var

1 голос
/ 23 апреля 2020

Для инициализации свойства в блоке init {}

Вы можете назначить тип и затем инициализировать его позже после выполнения некоторых задач в блоке init {}.

val binding: pendaftaranBinding

init{
    ...
    binding = DataBindingUtil.inflate(inflater, R.layout.pendaftaran, container, false)
    ...
}

To позже инициализируйте его в коде

Если вы не хотите инициализировать при построении класса, а вместо этого инициализировать его позже в коде, вы можете использовать модификатор lateinit :

lateinit var binding: pendaftaranBinding

fun someFunction() {
    ...
    binding = DataBindingUtil.inflate(inflater, R.layout.pendaftaran, container, false)
    ...
}

, чтобы к нему можно было получить доступ для всех методов

Я не понял эту строку, похоже, вам нужно что-то вроде stati c properties в java, инициализировать его вне класса. Это можно сделать с помощью объекта-компаньона в kotlin:

class YourClass {
    companion object {
        lateinit var binding: pendaftaranBinding
    }
}

fun initializeBinding() {
    YourClass.binding =
        DataBindingUtil.inflate(inflater, R.layout.pendaftaran, container, false)

}
...