2011-06-10 63 views
5

我遇到findViewById()返回NULL问题,他们很多人似乎遇到。我知道findViewById()只能在onFinishInflate()的膨胀视图后调用。我的问题是 - 什么是观点通货膨胀?LayoutInflater和onFinishInflate()

在Activity中,我调用setContentView(R.layout.testview),它应该调用View构造函数并调用onDraw()。所以这膨胀的观点是不是?如果是这样,为什么有一个LayoutInflater和一个函数实际上夸大视图?事实上,我的代码onInflateView()从未被调用,即使整个视图被渲染,我也能够与程序交互。这告诉我查看通胀与调用View的构造函数和函数不同。有人可以解释吗?

编辑:另外,我有我使用onDraw()函数绘制的自定义视图。不知何故,onFinishInflate()函数永远不会被我调用。这可能是什么原因?

-P

回答

6

我的问题是 - 什么看法通货膨胀?

查看通货膨胀是将布局XML文件转换为对象树的View对象的行为。您可以手动做到这一点使用LayoutInflater或Android会为你从setContentView(),内置Adapter类等

在其中应该调用查看构造活动我打电话的setContentView(R.layout.testview)和也调用onDraw()。所以这膨胀的观点是不是?

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

如果是的话为什么会有一个LayoutInflater和一个函数来实际扩充视图?

因为有时您需要手工完成,例如在具有不同类型行(例如,头和细节)的复杂ListView中。

+0

谢谢! Google ApiDemos中是否有这样的例子?另外当onFinishInflate()与setContentView()调用?在我的情况下,它根本不叫。 – user220201 2011-06-10 14:19:12

+0

@ user220201:“Google ApiDemos中是否有这样的例子?” - 什么样的例子? “另外,当onFinishInflate()与setContentView()调用?在我的情况下,它根本不叫。” - 我之前使用过'onFinishInflate()',它工作正常,尽管我没有任何当前的样本。确保你有'@ Override'注释,以防万一你在方法签名中犯了错误。 – CommonsWare 2011-06-10 14:39:45

+1

我在问一个需要调用LayoutInflater的例子。 – user220201 2011-06-10 14:42:05