LayoutInflater和onFinishInflate()

时间:2011-06-10 10:12:18

标签: android android-layout

我遇到了很多人似乎遇到的findViewById()返回NULL问题。我知道只有在onFinishInflate()中视图膨胀后才能调用findViewById()。我的问题是 - 什么是观点通胀?

在Activity中调用setContentView(R.layout.testview),它应调用View构造函数并调用onDraw()。这样膨胀视图不是吗?如果是这样,为什么有一个LayoutInflater和一个实际膨胀视图的功能?实际上在我的代码中onInflateView()永远不会被调用,即使整个视图已呈现并且我能够与程序进行交互。这告诉我,View通胀与调用View的构造函数和onDraw()函数有所不同。有人可以解释一下吗?

编辑:我也有一个使用onDraw()函数绘制的自定义视图。不知怎的,onFinishInflate()函数永远不会为我调用。这可能是什么原因?

-P

1 个答案:

答案 0 :(得分:6)

  

我的问题是 - 什么是观点通胀?

查看通胀是将布局XML文件转换为View对象的相应树的行为。您可以使用LayoutInflater手动执行此操作,或Android通过setContentView(),内置Adapter类等为您执行此操作。

  

在Activity中调用setContentView(R.layout.testview),它应调用View构造函数并调用onDraw()。那么膨胀视图不是吗?

setContentView()使提供的布局文件膨胀。

  

如果是这样,为什么有一个LayoutInflater和一个实际膨胀视图的函数?

因为有时您需要手动执行此操作,例如在具有不同行类型的复杂ListView中(例如,。标题和详细信息)。