ViewDataBinding.inflate
не генерирует элемент доступа дочернего вида в пользовательском представлении.
, таким образом, вы не можете коснуться line1 (TextView) только при использовании ViewDataBinding
.
Если вы не хотите использовать findViewById
или kotlin synthetic
, MyCustomView
также необходимо применить ViewDataBinding
. попробуйте, как показано ниже.
CustomView
class MyCustomView @JvmOverloads constructor(
context: Context, attrs: AttributeSet? = null, defStyleAttr: Int = 0
) : LinearLayout(context, attrs, defStyleAttr) {
private val binding =
CustomLayoutBinding.inflate(LayoutInflater.from(context), this, true)
val line1
get() = binding.line1
val line2
get() = binding.line2
}
MainActivity
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
val binding = ActivityMainBinding.inflate(LayoutInflater.from(this))
setContentView(binding.root)
with(binding.customView) {
line1.text = "Hello"
line2.text = "World"
}
}