Как использовать привязку вида в пользовательских представлениях - PullRequest
1 голос
/ 27 февраля 2020

Привязка к представлению выпущена с версией 3.6.

Документы: https://developer.android.com/topic/libraries/view-binding

Мой вопрос заключается в том, как использовать привязку к представлениям с настраиваемыми представлениями. Документация Google содержит только активность и фрагмент, показанные в шоу.

Я пробовал это, но ничего не показывалось.

LayoutInflater inflater = LayoutInflater.from(getContext());

А потом я использовал это, но опять же, не повезло.

LayoutInflater inflater = (LayoutInflater)
            getContext().getSystemService(Context.LAYOUT_INFLATER_SERVICE);

Полагаю, возможно, я не нацеливаю правильную разметку для моего вида, но не уверен в этом.

Ответы [ 3 ]

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

Просто сообщите root и хотите ли вы к нему присоединиться

init { // inflate binding and add as view
    binding = ResultProfileBinding.inflate(LayoutInflater.from(context), this, true)
}
0 голосов
/ 27 февраля 2020

Если вы пытаетесь использовать привязку вида с представлением root, это работает для меня:

class CustomView @JvmOverloads constructor(
    context: Context,
    attrs: AttributeSet? = null,
    defStyleAttr: Int = 0
) : ConstraintLayout(context, attrs, defStyleAttr) {

    private lateinit var binding: CustomViewBinding

    override fun onFinishInflate() {
        super.onFinishInflate()
        binding = CustomViewBinding.bind(this)
    }
}
0 голосов
/ 27 февраля 2020

Чтобы использовать привязку вида, вам нужно использовать сгенерированный класс привязки, а не LayoutInflater, например, если имя макета result_profile.xml, вам нужно использовать ResultProfileBinding как:

class CustomView @kotlin.jvm.JvmOverloads constructor(
    context: Context,
    attrs: AttributeSet? = null,
    defStyleAttr: Int = 0
) : FrameLayout(context, attrs, defStyleAttr) {

    private lateinit var binding: ResultProfileBinding

    init { // inflate binding and add as view
        binding = ResultProfileBinding.inflate(LayoutInflater.from(context))
        addView(binding.root)
    }

}
  1. Автоматически сгенерированный класс: result_profile.xml -> ResultProfileBinding (имя макета, добавлено Binding)
  2. Раздуть привязку

    ResultProfileBinding.inflate(LayoutInflater.from(context))
    
  3. Используйте addView, чтобы добавить представление в иерархию следующим образом:

    addView(binding.root)
    

Примечание. Если вы расширяетесь с ConstraintLayout (является родительским классом) затем используйте набор ограничений

...