3

我创建了 OpenGLRenderer.java 类并在其中放置了一些代码,没有显示错误。然后我将这段代码放在 RoomFragment.java 片段中创建视图:

public class RoomFragment extends Fragment {

/** Called when the fragment is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    GLSurfaceView view = new GLSurfaceView(this);
    view.setRenderer(new OpenGLRenderer());
    setContentView(this);
}}

但我越来越

构造函数 GLSurfaceView(RoomFragment) 未定义

未为 RoomFragment 类型定义方法 setContentView(RoomFragment)

错误。这些方法不是在标头中实现的吗?我猜这是因为这不是一个活动,而是一个仅在单击前一个片段的按钮时才处于活动状态的片段(在主活动菜单选择上处于活动状态)。

我该怎么做?如何在片段层中创建 GLSurfaceView?

4

1 回答 1

5

GLSurfaceView 需要Activity通过给它一个Context. Fragment并没有从Activity它的外观延伸,你正试图GLSurfaceView从它内部创建一个权利。

此外,setContentView必须从 中调用Activity,基本上你所说的是“我希望这个 Activity 以**View告诉它的方式显示”。因此,您必须从 Activity 本身调用该方法。

尝试将 in从调用 的位置GLSurfaceView放入,或使用'方法检索它绑定到的。ActivityFragmentFragmentgetActivity()Activity

第二个解决方案最终看起来像这样:

public class RoomFragment extends Fragment {

/** Called when the fragment is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    GLSurfaceView view = new GLSurfaceView(this.getActivity());
    view.setRenderer(new OpenGLRenderer());
    this.getActivity().setContentView(view);
}}

我不确定这是否是您正在寻找的东西,如果它有效,请告诉我!

于 2012-07-26T12:51:05.010 回答