Просмотр функции расширения привязки

Я использую следующую функцию расширения для View Binding в моих адаптерах и в моих пользовательских представлениях.

inline fun <T : ViewBinding> ViewGroup.viewBinding(crossinline bindingInflater: (LayoutInflater, ViewGroup, Boolean) -> T) =
 bindingInflater.invoke(LayoutInflater.from(this.context), this, true)
val binding = viewBinding(ComponentButtonBinding::inflate)

Для пользовательских представлений это работает нормально, но для адаптеров мне нужно, чтобы логическое значение в вызове было ложным. Как я могу исправить это и заставить эту функцию работать для обоих?

2
0
1 370
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Ответ принят как подходящий

Вы также можете просто передать логическую переменную в функцию расширения. Если вы в основном используете для этого true, вы можете установить значение по умолчанию на true, но это на ваше усмотрение.

inline fun <T : ViewBinding> ViewGroup.viewBinding(crossinline bindingInflater: (LayoutInflater, ViewGroup, Boolean) -> T, attachToParent: Boolean = true) =
        bindingInflater.invoke(LayoutInflater.from(this.context), this, attachToParent)

val binding = viewBinding(ComponentButtonBinding::inflate)
val binding = viewBinding(ComponentButtonBinding::inflate, false)

Функция расширения:

inline fun <T : ViewBinding> AppCompatActivity.viewBinding(
  crossinline bindingInflater: (LayoutInflater) -> T) =
    lazy(LazyThreadSafetyMode.NONE) {
        bindingInflater.invoke(layoutInflater)
    }

Пример:

class MainActivity : AppCompatActivity() {
    private val binding by viewBinding(MainActivityBinding::inflate)

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(binding.root)

        binding.button.onClick {
            showToast("hello world!")
        }
}

Подробнее

Другие вопросы по теме