查看绑定扩展功能

Pra*_* P. 2 android kotlin

我在适配器和自定义视图中使用以下扩展函数进行视图绑定。

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

对于自定义视图,它工作得很好,但对于适配器,我需要调用中的布尔值为 false。我怎样才能解决这个问题并使这个功能对两者都起作用?

Håk*_*hia 11

您也可以将布尔变量传递给扩展函数。如果您主要使用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)
Run Code Online (Sandbox Code Playgroud)


akh*_*707 5

扩展功能:

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

例子:

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!")
        }
}
Run Code Online (Sandbox Code Playgroud)

更多信息