-2

我想知道为什么有时 getActivity.findViewById() 有效,有时它返回 null ?

和 myView.findViewById() 一起工作吗?

提前致谢 :)

4

2 回答 2

4

findViewById不是对 a 的全局搜索View。它只在特定的地方寻找。如果没有View指定(如在您的 myView.findViewById() 示例中)findViewById将在内容视图中查找Activity或者Fragment您正在从中调用它。否则它将在指定的视图内查看。

如果您在错误的地方寻找视图,您将得到 null - 即您正在寻找的东西不在您正在搜索的地方。

这是一个示例:如果您正在使用ListView您正在控制的项目,则Adapter需要调用findViewbById各个项目的膨胀布局以设置它们的子视图。为什么?因为 a 一ListView开始是空的。如果您findViewById在一般情况下调用,ListActivity您将在错误的位置查找列表项字段,即活动的内容视图 - 而不是最终将为每个列表项膨胀的布局。

于 2013-08-27T12:50:38.650 回答
0

我假设您在 Fragment 中并调用 getActivity.findViewById()。

查看源代码,Activity.findViewById() 在 Window 上调用 findViewById() ,在其装饰视图上调用 findViewById() 。

因此,当您调用 getActivity.findViewById() 时,您正在搜索装饰视图的子视图。

如果您直接在视图上调用 findViewById(),则您正在从给定视图中查找子视图。

因此,如果视图不在您的装饰视图子视图中,getActivity.findViewById() 将返回 null 而 view.findViewById() 将起作用。

于 2013-08-27T12:50:30.207 回答