Tencent/QMUI_Android · error · RuntimeException

%s did not call through to super.onEnterAnimationEnd(Animati

Error message

%s did not call through to super.onEnterAnimationEnd(Animation)

What it means

checkAndCallOnEnterAnimationEnd mirrors the start check: onEnterAnimationEnd must call the super implementation, verified via mCalled; otherwise the library throws to keep animation-end state handling consistent.

Source

Thrown at arch/src/main/java/com/qmuiteam/qmui/arch/QMUIFragment.java:1148

            });
            return animator;
        }
        return super.onCreateAnimator(transit, enter, nextAnim);
    }

    private void checkAndCallOnEnterAnimationStart(@Nullable Animator animation) {
        mCalled = false;
        onEnterAnimationStart(animation);
        if (!mCalled) {
            throw new RuntimeException(getClass().getSimpleName() + " did not call through to super.onEnterAnimationStart(Animation)");
        }
    }

    private void checkAndCallOnEnterAnimationEnd(@Nullable Animator animation) {
        mCalled = false;
        onEnterAnimationEnd(animation);
        if (!mCalled) {
            throw new RuntimeException(getClass().getSimpleName() + " did not call through to super.onEnterAnimationEnd(Animation)");
        }
    }

    /**
     * onCreateView
     */
    protected abstract View onCreateView();


    /**
     * Corresponding to {@link #onCreateView()}, it called only when new UI (not cached UI)
     * is created by {@link #onCreateView()}.
     * It may be used to bind views to fragment and dynamically create child views such as
     * {@link QMUITopBar#addLeftBackImageButton()}
     *
     * @param rootView the view created by {@link #onCreateView()}
     */
    protected void onViewCreated(@NonNull View rootView) {

View on GitHub (pinned to 026e7d4866)

Solutions

  1. Call super.onEnterAnimationEnd(animation) in the override
  2. Place custom cleanup after the super call
  3. Delete the override if it only duplicated default behavior

Example fix

// before
@Override
public void onEnterAnimationEnd(Animator animation) {
    cleanup();
}
// after
@Override
public void onEnterAnimationEnd(Animator animation) {
    super.onEnterAnimationEnd(animation);
    cleanup();
}
Defensive patterns

Strategy: type-guard

Prevention

When it happens

Trigger: Overriding onEnterAnimationEnd(Animator/Animation) without calling super.onEnterAnimationEnd(animation).

Common situations: Cleaning up custom animations and forgetting super; overrides written before the contract existed; merge conflicts dropping the super call.

Related errors


AI-assisted analysis of Tencent/QMUI_Android@026e7d4866 (2026-09-06). Data as JSON: /api/errors/7fc16ac30f9cc78a. Report an issue: GitHub.