首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >视图绑定扩展函数

视图绑定扩展函数
EN

Stack Overflow用户
提问于 2020-12-22 16:54:10
回答 2查看 346关注 0票数 1

我在我的适配器和自定义视图中使用了以下View Binding扩展函数。

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

对于自定义视图,它工作得很好,但是对于适配器,我需要调用中的布尔值为false。我怎样才能修复这个问题,让这个函数同时适用于这两个函数呢?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2020-12-22 17:02:56

您也可以将一个布尔变量传递给扩展函数。如果主要使用true,您可能希望将缺省值设置为true,但这取决于您。

代码语言:javascript
复制
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)
票数 6
EN

Stack Overflow用户

发布于 2021-11-17 08:00:36

扩展功能:

代码语言:javascript
复制
inline fun <T : ViewBinding> AppCompatActivity.viewBinding(
  crossinline bindingInflater: (LayoutInflater) -> T) =
    lazy(LazyThreadSafetyMode.NONE) {
        bindingInflater.invoke(layoutInflater)
    }

示例:

代码语言:javascript
复制
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!")
        }
}

More info

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/65405721

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档