我想知道为什么有时 getActivity.findViewById() 有效,有时它返回 null ?
和 myView.findViewById() 一起工作吗?
提前致谢 :)
我想知道为什么有时 getActivity.findViewById() 有效,有时它返回 null ?
和 myView.findViewById() 一起工作吗?
提前致谢 :)
findViewById
不是对 a 的全局搜索View
。它只在特定的地方寻找。如果没有View
指定(如在您的 myView.findViewById() 示例中)findViewById
将在内容视图中查找Activity
或者Fragment
您正在从中调用它。否则它将在指定的视图内查看。
如果您在错误的地方寻找视图,您将得到 null - 即您正在寻找的东西不在您正在搜索的地方。
这是一个示例:如果您正在使用ListView
您正在控制的项目,则Adapter
需要调用findViewbById
各个项目的膨胀布局以设置它们的子视图。为什么?因为 a 一ListView
开始是空的。如果您findViewById
在一般情况下调用,ListActivity
您将在错误的位置查找列表项字段,即活动的内容视图 - 而不是最终将为每个列表项膨胀的布局。
我假设您在 Fragment 中并调用 getActivity.findViewById()。
查看源代码,Activity.findViewById() 在 Window 上调用 findViewById() ,在其装饰视图上调用 findViewById() 。
因此,当您调用 getActivity.findViewById() 时,您正在搜索装饰视图的子视图。
如果您直接在视图上调用 findViewById(),则您正在从给定视图中查找子视图。
因此,如果视图不在您的装饰视图子视图中,getActivity.findViewById() 将返回 null 而 view.findViewById() 将起作用。