Похоже, вы пытаетесь добавить фрагмент вместо замены контейнера.
Вот мой код:
supportFragmentManager.beginTransaction()
.replace(R.id.main_container, GLFragment())
.addToBackStack(null)
.commit()
Фрагмент (используя ваш код не компилируется с this.activity
)
class GLFragment : Fragment() {
private lateinit var glView: GLSurfaceView
override fun onCreateView(inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle?): View? {
this.glView = MySurfaceView(requireActivity())
return this.glView
}
}
GLView:
class MySurfaceView constructor(context: Context) : GLSurfaceView(context) {
init {
setEGLContextClientVersion(2) // I have used 2 because running on emulator
preserveEGLContextOnPause = true
setRenderer(ClearRenderer())
}
}
internal class ClearRenderer : GLSurfaceView.Renderer {
override fun onSurfaceCreated(gl: GL10?, config: EGLConfig?) {
}
override fun onSurfaceChanged(gl: GL10, w: Int, h: Int) {
gl.glViewport(0, 0, w, h)
}
override fun onDrawFrame(gl: GL10) {
gl.glClear(GL10.GL_COLOR_BUFFER_BIT or GL10.GL_DEPTH_BUFFER_BIT)
}
}
и вот скриншот профилировщика:
Таким образом, для подстановки замените add
на replace
, замените this.activity
на requireActivity()
, requireActivity()
также не возвращает ноль, и это гарантировано.
Надеюсь, это поможет !!!