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) は未定義です

メソッド setContentView(RoomFragment) はタイプ RoomFragment に対して定義されていません

エラー。それらのメソッドはヘッダーに実装されていませんか? その理由は、これはアクティビティではなく、前のフラグメント (メイン アクティビティ メニューの選択でアクティブ) のボタン クリックでのみアクティブになるフラグメントだからだと思います。

どうすればいいですか?フラグメントレイヤーで GLSurfaceView を作成するにはどうすればよいですか?

4

1 に答える 1

5

GLSurfaceView は、Activityを与えることによってに関連付ける必要がありContextます。Fragmentその外見から拡張されていない場合、その内部から権利Activityを作成しようとしています。GLSurfaceView

また、setContentViewから呼び出す必要がありActivityます。基本的に、あなたが言っているのは、「このアクティビティを、**View指示されている方法で表示したい」ということです。したがって、Activity 自体からメソッドを呼び出す必要があります。

を呼び出した fromGLSurfaceView内にを配置するか、のメソッドを使用してバインド先のを取得してみてください。ActivityFragmentFragmentgetActivity()Activity

2 番目のソリューションは、次のようになります。

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 に答える