{"record":{"id":"ff45186371a9d804","repo":"Tencent/QMUI_Android","slug":"s-did-not-call-through-to-super-onenteranimations","errorCode":null,"errorMessage":"%s did not call through to super.onEnterAnimationStart(Animation)","messagePattern":"(.+?) did not call through to super\\.onEnterAnimationStart\\(Animation\\)","errorType":"exception","errorClass":"RuntimeException","httpStatus":null,"severity":"error","filePath":"arch/src/main/java/com/qmuiteam/qmui/arch/QMUIFragment.java","lineNumber":1140,"sourceCode":"                public void onAnimationStart(Animator animation) {\n                    checkAndCallOnEnterAnimationStart(animation);\n                }\n\n                @Override\n                public void onAnimationEnd(Animator animation) {\n                    checkAndCallOnEnterAnimationEnd(animation);\n                }\n            });\n            return animator;\n        }\n        return super.onCreateAnimator(transit, enter, nextAnim);\n    }\n\n    private void checkAndCallOnEnterAnimationStart(@Nullable Animator animation) {\n        mCalled = false;\n        onEnterAnimationStart(animation);\n        if (!mCalled) {\n            throw new RuntimeException(getClass().getSimpleName() + \" did not call through to super.onEnterAnimationStart(Animation)\");\n        }\n    }\n\n    private void checkAndCallOnEnterAnimationEnd(@Nullable Animator animation) {\n        mCalled = false;\n        onEnterAnimationEnd(animation);\n        if (!mCalled) {\n            throw new RuntimeException(getClass().getSimpleName() + \" did not call through to super.onEnterAnimationEnd(Animation)\");\n        }\n    }\n\n    /**\n     * onCreateView\n     */\n    protected abstract View onCreateView();\n\n\n    /**","sourceCodeStart":1122,"sourceCodeEnd":1158,"githubUrl":"https://github.com/Tencent/QMUI_Android/blob/026e7d486677d6593a96689cd590ec3561176717/arch/src/main/java/com/qmuiteam/qmui/arch/QMUIFragment.java#L1122-L1158","documentation":"checkAndCallOnEnterAnimationStart invokes onEnterAnimationStart and verifies the subclass called the super implementation via the mCalled flag. Skipping super breaks the library's animation lifecycle bookkeeping, so it throws.","triggerScenarios":"Overriding onEnterAnimationStart(Animator/Animation) in a QMUIFragment subclass without calling super.onEnterAnimationStart(animation).","commonSituations":"Custom enter animations written from scratch; overrides copied from non-QMUI fragment code; upgrading QMUI where the super-call became mandatory.","solutions":["Call super.onEnterAnimationStart(animation) in the override","If custom logic must run alone, still invoke super and then apply custom animation","Remove the override if no customization is needed"],"exampleFix":"// before\n@Override\npublic void onEnterAnimationStart(Animator animation) {\n    doCustomAnim();\n}\n// after\n@Override\npublic void onEnterAnimationStart(Animator animation) {\n    super.onEnterAnimationStart(animation);\n    doCustomAnim();\n}","handlingStrategy":"type-guard","validationCode":null,"typeGuard":null,"tryCatchPattern":null,"preventionTips":["Call super in every onEnterAnimationStart override","Add code-review checklist item for animation lifecycle overrides","Test enter animations in debug builds where the check throws"],"tags":["android","override-contract","animation"],"backgroundTag":"super-not-called","analyzedSha":"026e7d486677d6593a96689cd590ec3561176717","analyzedAt":"2026-09-06T13:32:24.816Z","contentChangedAt":"2026-09-06T13:32:24.816Z","schemaVersion":2},"datasetVersion":"2026-09-14T05:17:10.506Z"}