我遇到了很多人似乎遇到的findViewById()
返回NULL问题。我知道只有在onFinishInflate()
中视图膨胀后才能调用findViewById()。我的问题是 - 什么是观点通胀?
在Activity中调用setContentView(R.layout.testview)
,它应调用View构造函数并调用onDraw()。这样膨胀视图不是吗?如果是这样,为什么有一个LayoutInflater
和一个实际膨胀视图的功能?实际上在我的代码中onInflateView()
永远不会被调用,即使整个视图已呈现并且我能够与程序进行交互。这告诉我,View通胀与调用View的构造函数和onDraw()
函数有所不同。有人可以解释一下吗?
编辑:我也有一个使用onDraw()函数绘制的自定义视图。不知怎的,onFinishInflate()函数永远不会为我调用。这可能是什么原因?
-P
答案 0 :(得分:6)
我的问题是 - 什么是观点通胀?
查看通胀是将布局XML文件转换为View
对象的相应树的行为。您可以使用LayoutInflater
手动执行此操作,或Android通过setContentView()
,内置Adapter
类等为您执行此操作。
在Activity中调用setContentView(R.layout.testview),它应调用View构造函数并调用onDraw()。那么膨胀视图不是吗?
setContentView()
使提供的布局文件膨胀。
如果是这样,为什么有一个LayoutInflater和一个实际膨胀视图的函数?
因为有时您需要手动执行此操作,例如在具有不同行类型的复杂ListView
中(例如,。标题和详细信息)。