片段布局内的RelativeLayout的findViewById

时间:2018-06-28 20:24:20

标签: android android-fragments

我正在尝试使用findViewById()在片段布局中查找RelativeLayout,然后将我的GridView添加到RelativeLayout中。 这是我的代码:

RelativeLayout relativeLayout = (RelativeLayout) findViewById(R.id.relativeLayout);
GridLayout gridLayout = new GridLayout(this);
relativeLayout.addView(gridLayout);

Fragment布局的XML文件:

<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    tools:context="com.sepehr.dotsandlines.Game">

    <RelativeLayout
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:id="@+id/relativeLayout">

    </RelativeLayout>
</FrameLayout>

错误:

原因:java.lang.NullPointerException:尝试在空对象引用上调用虚拟方法“ void android.widget.RelativeLayout.addView(android.view.View)”

注意::我正在MainActivity.java中而不是Fragment Java中寻找ID。

3 个答案:

答案 0 :(得分:0)

内部Fragment首先获得root view并使用findViewById()查找ID。内部onCreateView方法使用以下代码。

public View onCreateView(LayoutInflater inflater, 
                         ViewGroup container, 
                         Bundle savedInstanceState) {
     View view = inflater.inflate(R.layout.your_fragment_layout, container, false);
RelativeLayout relativeLayout = (RelativeLayout)view. findViewById(R.id.relativeLayout);
     return view;
}

答案 1 :(得分:0)

在onCreateView中使用findViewById确实不是一个好主意。您可能会遇到随机崩溃,而无法找到视图。

根据片段生命周期,您应该在onViewCreated

中执行此操作
@Override
public void onViewCreated(View view, Bundle savedInstanceState) {
super.onViewCreated(view, savedInstanceState);
// add your code here which executes after the execution of onCreateView() method.

}

有关更多详细信息,您可以参考Difference between onCreateView and onViewCreated in Fragment

答案 2 :(得分:0)

我自己弄清楚了。首先,我正在MainActivity.java文件中查找ID,而在Game.java中(覆盖Java片段文件)覆盖onCreateView()onViewCreated()并没有任何作用!那不是答案。

我使用LayoutInflater来增加片段的布局,并使用它来查找ID ({_ {1}}由activity_main布局中的按钮调用)

objectCreate()

另一个问题是,我现在没有得到任何错误,但是屏幕仍然是空白,并且没有显示任何视图!