首页 > 解决方案 > 这个 android 应用教程代码中的 layoutInflater 定义在哪里?

问题描述

本 Android 教程介绍了视图绑定的概念,本节将演示如何使用它。在这种情况下,视图绑定是使用以下代码设置的。

class MainActivity : AppCompatActivity() {

    lateinit var binding: ActivityMainBinding

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        binding = ActivityMainBinding.inflate(layoutInflater)
        setContentView(binding.root)
    }
}

调用的解释ActivityMainBinding.inflate()如下:

此行初始化您将用于访问 activity_main.xml 布局中的视图的绑定对象。

这没有解释变量layoutInflater的定义位置。

使用 Android Studio 时,代码完成提示变量“来自 getLayoutInflater()”:

显示 layoutInflater 代码完成的 Android Studio 屏幕截图片段

getLayoutInflater()似乎是Activity中的一种方法,但这并不能帮助我理解引用在layoutInflater做什么,它在哪里定义,以及它在代码的这一点上是如何在范围内的。有人可以帮我理解这一点吗?

标签: androidandroid-studiokotlinandroid-viewbinding

解决方案


ActivityMainBinding.java是数据绑定生成的类,有一个静态方法 inflate()。当您将layoutInflater(它检索已经连接到当前上下文的标准 LayoutInflater 实例)传递给 inflate() 时,它会在代码下生成与我们通常在为视图膨胀时所做的相同的代码,并自动获取布局名称。

所以,整个方法就像

 public static ActivityMainBinding inflate(@NonNull LayoutInflater inflater,
      @Nullable ViewGroup parent, boolean attachToParent) {
    View root = inflater.inflate(R.layout.activity_main, parent, false);
    if (attachToParent) {
      parent.addView(root);
    }
    return bind(root);
  }

我希望这是您正在寻找的,并且肯定可以帮助您。谢谢


推荐阅读