我已经读了here的一个答案,我仍然感到困惑。
““当我第一次开始Android编程的时候,我真的被LayoutInflater和findViewById搞糊涂了,有时我们用一个,有时用另一个。
LayoutInflater用于从您的一个XML布局创建新的View(或Layout)对象。
findViewById只为您提供了一个尚未创建的视图的引用。您可能认为您尚未创建任何视图,但无论何时您在onCreate中调用setContentView,Activity的布局沿着子视图都会在幕后膨胀(创建)。”
我想我明白了,所以当LayoutInflater创建一个新的对象视图,为什么我们不能这样做:view = new View(context);
view = findViewById(R.id.textView);
我错过了什么吗?谢谢你的回答。
我试着去理解LayOutInflater的工作方式
2条答案
按热度按时间q0qdq0h21#
简而言之:
LayoutInflater
帮助您将用XML编写的布局“交换”到代码中,它的解析器接受XML输入并使用Context
创建正确的View
(在问题的第一行代码中创建new View
对象的一些简单方法)。Activity
在幕后完成了这项工作,为我们的开发人员提供了简单的setContentView
和findViewById
方法,但您可能还希望添加一些以XML定义的自定义View
(因为一些if
)或运行时,然后您可以基于已创建/显示的视图正在使用的相同Context
(例如Activity
本身)来使用LayoutInflater
。请注意,当您使用
setContentView
时,LayoutInflater
会将一些基于XML的View
附加到Activity
,因此同时,将返回对已膨胀的现有
View
的引用只是使用上下文在内存中创建一些虚拟
View
,它不会添加到Activity
、Fragment
以及任何显示的ViewGroup
,因此甚至不可见(并且它的view
示例与findViewById
中找到的示例不同)。ngynwnxp2#
啊对不起,为了删除评论,我开始发短信,毫无意义,所以我删除了。下次我会离开它,对不起我的第一次股票溢出。