如何在片段内的函数中使用findViewById

时间:2013-09-04 14:09:10

标签: android android-fragments

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

3 个答案:

答案 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)中充气的布局中?