我想在一个用片段写的函数中找到一些布局,但我总是得到一个NullPointerException
这里是我的代码:
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
v = (ViewGroup)inflater.inflate(R.layout.main,null);
return v;
}
public void myfunction(String etat) {
LinearLayout myLayout3 = (LinearLayout) v.findViewById(
R.id.f_2);
答案 0 :(得分:1)
在片段中,您可以使用getView().findViewById(int viewId)
答案 1 :(得分:0)
如果v
是您的片段的成员,那么您必须在onCreateView中初始化之前调用myfunction
。
您可以改为使用getView()
,但不能在onCreateView
调用的方法中使用它(因为getView
仍将返回null {{1}返回)。
如果您希望在onCreateView
期间调用该方法,请将onCreateView
作为参数传递给它。
答案 2 :(得分:0)
我发现最好在onCreateView中扩展你的布局,然后在onActivityCreated中检索视图。视图可能需要一些时间才能膨胀,因此尝试调用findViewById可能无效(或返回null),因为视图层次结构可能未实例化且视图可能尚未呈现。
来自文档:
onActivityCreated:在片段活动发生时调用 创建并实例化此片段的视图层次结构。有可能 一旦这些部件就位,就会进行最终的初始化 作为检索视图或恢复状态。这称之为 onCreateView(LayoutInflater,ViewGroup,Bundle)和之前 onViewStateRestored(束)。
另外请记住,在您的示例代码中,您尝试检索的视图(R.id.f_2)必须存在于v(R.layout.main)中充气的布局中?