Android中的OpenGL onCreate片段视图

3mp*_*tri 3 android opengl-es oncreate android-fragments

我已经创建了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);
}}
Run Code Online (Sandbox Code Playgroud)

但我得到了

构造函数GLSurfaceView(RoomFragment)未定义

对于RoomFragment类型,方法setContentView(RoomFragment)未定义

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

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

Red*_*rav 5

该GLSurfaceView需要进行相关的Activity给予它Context.Fragment不会从Activity它的外观延伸,你试图GLSurfaceView从它内部创建一个权利.

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

尝试将GLSurfaceView内部Activity放在你调用它的地方Fragment,或者使用Fragment's getActivity()方法来检索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);
}}
Run Code Online (Sandbox Code Playgroud)

我不确定这是不是你要找的,让我知道它是否有效!