我正在尝试使用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。
答案 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()
另一个问题是,我现在没有得到任何错误,但是屏幕仍然是空白,并且没有显示任何视图!