0

我想在一个用片段编写的函数中找到一些布局,但我总是得到一个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);
4

3 回答 3

1

在片段中,您可以检索视图getView().findViewById(int viewId)

于 2013-09-04T14:11:44.697 回答
0

我发现最好在 onCreateView 中扩展您的布局,然后在 onActivityCreated 中检索视图。视图可能需要一些时间来膨胀,因此尝试调用 findViewById 可能不起作用(或返回 null),因为视图层次结构可能未实例化并且视图可能尚未呈现。

从文档:

onActivityCreated:当片段的活动被创建并且这个片段的视图层次被实例化时调用。一旦这些部分到位,它就可以用于进行最终初始化,例如检索视图或恢复状态。这在 onCreateView(LayoutInflater, ViewGroup, Bundle) 之后和 onViewStateRestored(Bundle) 之前调用。

还要记住,在您的示例代码中,您尝试检索的视图 (R.id.f_2) 必须存在于 v (R.layout.main) 中膨胀的布局中?

于 2013-09-04T14:29:49.040 回答
0

如果v是您的片段的成员,那么您必须myfunction在它在 onCreateView 中初始化之前调用它。

您可以使用getView()它,但不能在从中调用的方法中使用它onCreateView(因为getView在返回之前仍将返回 null onCreateView)。

如果您希望在 期间调用该方法,请将其作为参数onCreateView传递。v

于 2013-09-04T14:14:00.533 回答