현재 구현하고자 하는 앱에서 한 화면(MainActivity)에 3개의 Fragment를 이용하여 각각의 Fragment에서 정보를 처리할 수 있도록 구현할 예정입니다.
답변 주신 내용으로 적용해 본 결과 지도가 그려지는 것은 확인하였습니다.
3개의 Fragment를 사용하려고 하고 있기 때문에 상기 답변의 MainActivity에 있는 sdkInit 함수의 코드를 카카오맵 Fragment 내부에서 처리하고자 하였습니다.
sdkInit 함수를 Fragment에 적용하는 경우, 아래와 같은 에러가 발생합니다.
E Exception configuring surface
java.lang.NullPointerException: Attempt to invoke virtual method ‘void android.opengl.GLSurfaceView$GLThread.surfaceCreated()’ on a null object reference
at android.opengl.GLSurfaceView.surfaceCreated(GLSurfaceView.java:533)
at android.view.SurfaceView.updateSurface(SurfaceView.java:1174)
at android.view.SurfaceView.lambda$new$0$SurfaceView(SurfaceView.java:181)
at android.view.-$$Lambda$SurfaceView$w68OV7dB_zKVNsA-r0IrAUtyWas.onPreDraw(Unknown Source:2)
at android.view.ViewTreeObserver.dispatchOnPreDraw(ViewTreeObserver.java:1093)
at android.view.ViewRootImpl.performTraversals(ViewRootImpl.java:3197)
at android.view.ViewRootImpl.doTraversal(ViewRootImpl.java:2020)
at android.view.ViewRootImpl$TraversalRunnable.run(ViewRootImpl.java:8410)
at android.view.Choreographer$CallbackRecord.run(Choreographer.java:974)
at android.view.Choreographer.doCallbacks(Choreographer.java:797)
at android.view.Choreographer.doFrame(Choreographer.java:732)
at android.view.Choreographer$FrameDisplayEventReceiver.run(Choreographer.java:959)
at android.os.Handler.handleCallback(Handler.java:938)
at android.os.Handler.dispatchMessage(Handler.java:99)
at android.os.Looper.loop(Looper.java:223)
at android.app.ActivityThread.main(ActivityThread.java:7717)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:612)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:997)
sdkint에 해당하는 코드를 Fragment 내에서 사용할 수 있는 방법은 없는 것인지 문의 드립니다. (상기 에러가 나면 지도가 그려지지 않는 것 같습니다.)
KNSDK의 install 및 initializeWithAppKey 함수 결과를 확인 후 Fragment를 add 해야 한다는 말씀은
Fragment를 add하고 나서 KNSDK의 install 및 initializeWithAppKey 함수를 호출하면 지도가 그려지지 않는 것으로 이해해도 될까요?
Fragment 내에서 KNSDK의 install 및 initializeWithAppKey 함수를 호출하고 나서 initializeWithAppKey 가 성공일 때 KNMapView를 binding 및 requestRender를 호출 하도록 처리해 보았으나, 상기 문의 드렸던 Exception이 발생합니다.
Fragment의 onAttach, onCreate, onCreateViewe, onViewCreate 등에서 KNSDK의 install 및 initializeWithAppKey를 호출해도 동일한 Exception이 발생하고 있습니다. (디버그 결과 함수 호출과는 별개로 비동기로 처리되고 있는 것 같아 보입니다.)
추가적으로, opengl surface가 null인 것으로 보여, surface를 추가로 만들어 setRender를 호출해 보았으나, bining 할 때 setRender가 두 번 호출되어 올바르게 생성되지 않습니다.
원래 의도는 상기 문의사항에서 말씀 드린 바와 같이 3개의 Fragment에서 서로 다른 정보를 표현하기 위해 각각의 Fragment 내에서 관련 로직을 수행하는 것이 었으나, Kakao Map을 위한 Fragment 내부에서 처리하기 어렵다면
답변 주신 내용 처럼 Activity에서 KNSDK의 install 및 initializeWithAppKey 함수를 호출하고, Fragment를 add하는 방향으로 진행해야 할 것 같습니다.
번거러우시겠지만 만약, Fragment를 add 한 후에 Fragment에서 KNSDK의 intall 및 initializeWithAppKey 함수를 호출하여도 지도가 표시 될 수 있는 가능성이 있는지 다시 한 번 확인 요청 드려봅니다.