📖
java.lang.IllegalArgumentException: at android.view.ViewGroup.
Androidで以下のようなエラーが出る場合。
たまにランダムに落ちて何が原因がわかりにくいやつです。
ググってもなかなか見つからず解決に時間がかかったので記事化しました。
エラーメッセージで検索した場合に引っかかってお役に立てれば。
java.lang.IllegalArgumentException: parameter must be a descendant of this view
at android.view.ViewGroup.offsetRectBetweenParentAndChild(ViewGroup.java:4479)
at android.view.ViewGroup.offsetDescendantRectToMyCoords(ViewGroup.java:4416)
at android.view.ViewRootImpl.scrollToRectOrFocus(ViewRootImpl.java:2656)
at android.view.ViewRootImpl.draw(ViewRootImpl.java:2300)
at android.view.ViewRootImpl.performDraw(ViewRootImpl.java:2249)
at android.view.ViewRootImpl.performTraversals(ViewRootImpl.java:1882)
at android.view.ViewRootImpl.doTraversal(ViewRootImpl.java:1009)
at android.view.ViewRootImpl$TraversalRunnable.run(ViewRootImpl.java:5508)
at android.view.Choreographer$CallbackRecord.run(Choreographer.java:749)
at android.view.Choreographer.doCallbacks(Choreographer.java:562)
at android.view.Choreographer.doFrame(Choreographer.java:532)
at android.view.Choreographer$FrameDisplayEventReceiver.run(Choreographer.java:735)
at android.os.Handler.handleCallback(Handler.java:730)
at android.os.Handler.dispatchMessage(Handler.java:92)
at android.os.Looper.loop(Looper.java:213)
at android.app.ActivityThread.main(ActivityThread.java:5225)
at java.lang.reflect.Method.invokeNative(Method.java)
at java.lang.reflect.Method.invoke(Method.java:525)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:741)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:557)
at dalvik.system.NativeStart.main(NativeStart.java)
原因がListViewの場合。
LisrView上のViewやその上のEditTextにフォーカスが当たったままリサイクルされると落ちるので対処する。対処法はStackOverFlowより。
Admobを利用されてる場合。(Banner?など)
上と同じ問題がAdmobにも起きると思われる(?)。
だいぶ前からあるようですが、
Google Mobile Ads SDK: 21.0.0
で遭遇しました。
admobのview生成時に
adView.setDescendantFocusability(ViewGroup.FOCUS_BLOCK_DESCENDANTS);
と設定する。
元記事は、react-nativeのissueより
(これの原因を特定して解決できたreact-nativeの人たちすごい。)
Discussion