【问题标题】:OpenGL onCreate fragment view in AndroidAndroid中的OpenGL onCreate片段视图
【发布时间】:2012-07-26 10:40:17
【问题描述】:

我创建了 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) 未定义

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

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

我该怎么做?如何在 Fragments 层创建 GLSurfaceView?

【问题讨论】:

    标签: android android-fragments opengl-es oncreate


    【解决方案1】:

    GLSurfaceView 需要与Activity 相关联,方法是给它一个ContextFragment 不是从 Activity 扩展而来的,从外观上看,您正试图从其内部创建一个 GLSurfaceView

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

    尝试将GLSurfaceView 放在调用FragmentActivity 中,或者使用FragmentgetActivity() 方法检索绑定到的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);
    }}
    

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

    【讨论】:

    • 我明白 :) 我必须从片段中退一步才能获得上下文。现在好了,谢谢!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-10-24
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多