Android Studio layoutInflater在这个android应用教程代码中定义在哪里?

xghobddn  于 2023-01-14  发布在  Android
关注(0)|答案(2)|浏览(106)

This Android tutorial介绍了 * 视图绑定 * 的概念,本节演示了如何使用它。在本例中,使用以下代码设置视图绑定。

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()":

getLayoutInflater()似乎是Activity中的一个方法,但这并不能帮助我理解对layoutInflater的引用在做什么,它在哪里定义,以及它在代码的这个位置是如何在作用域中的。

p1iqtdky

p1iqtdky1#

ActivityMainBinding.java是由数据绑定生成的类,它有一个static方法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);
  }

我希望这是你正在寻找的,肯定能帮助你。谢谢

9q78igpj

9q78igpj2#

我遇到了同样的问题,发现layoutInflater是在NavigationMenuPresenter.java中声明的。

package com.google.android.material.internal;
...

public class NavigationMenuPresenter implements MenuPresenter {
  ...

  LayoutInflater layoutInflater;
  ...
      
  public void initForMenu(@NonNull Context context, @NonNull MenuBuilder menu) {
    layoutInflater = LayoutInflater.from(context);
    ...

在我的例子中,java脚本的完整路径是
%HOMEDRIVE%%HOMEPATH%.gradle\缓存\模块-2\文件-2.1\com.google.android.材料\材料\1.7.0\289bb3a7fea52532f1163487f9469217ee608a9\材料-1.7.0-源代码.jar!\com\谷歌\android\材料\内部\导航菜单演示文稿. java

相关问题