From e7d8f68f28282d956a0e61f1e164e7393b4f4485 Mon Sep 17 00:00:00 2001 From: Andy Tsui Date: Mon, 1 Jun 2026 11:14:15 +0100 Subject: [PATCH] fix: resolve AndroidViewComponent cast error on sprite / Ball removal --- .../DynamicComponents/DynamicComponents.java | 28 +++++++++++-------- 1 file changed, 16 insertions(+), 12 deletions(-) diff --git a/src/com/yusufcihan/DynamicComponents/DynamicComponents.java b/src/com/yusufcihan/DynamicComponents/DynamicComponents.java index d107347..73678c2 100644 --- a/src/com/yusufcihan/DynamicComponents/DynamicComponents.java +++ b/src/com/yusufcihan/DynamicComponents/DynamicComponents.java @@ -321,11 +321,11 @@ public void Move(AndroidViewComponent arrangement, AndroidViewComponent componen "so its ID can be reused for other components that are going to be created later." ) public void Remove(String id) { - Object component = COMPONENTS.get(id); + Component component = COMPONENTS.get(id); if (component == null) { return; } - RemoveComponent((AndroidViewComponent)component); + RemoveComponent(component); COMPONENTS.remove(id); COMPONENT_IDS.remove(component); } @@ -335,24 +335,28 @@ public void Remove(String id) { "But if the given component is dynamically created by this extension, this block will also " + "de-register its ID so its ID can be reused for other components that are going to be created later." ) - public void RemoveComponent(AndroidViewComponent component) { + public void RemoveComponent(Component component) { try { Method mMethod = Utils.getMethod(component, "getView"); if (mMethod != null) { final View mComponent = (View) mMethod.invoke(component); - final ViewGroup mParent = (ViewGroup) mComponent.getParent(); - if (postOnUiThread) { - new Handler(Looper.getMainLooper()).post(new Runnable() { - @Override - public void run() { + if (mComponent != null) { + final ViewGroup mParent = (ViewGroup) mComponent.getParent(); + if (mParent != null) { + if (postOnUiThread) { + new Handler(Looper.getMainLooper()).post(new Runnable() { + @Override + public void run() { + mParent.removeView(mComponent); + } + }); + } else { mParent.removeView(mComponent); } - }); - } else { - mParent.removeView(mComponent); + } } } - final String[] closeMethods = new String[] { "onPause", "onDestroy" }; + final String[] closeMethods = new String[] { "onPause", "onDestroy", "onDelete" }; for (String methodName : closeMethods) { final Method invokeMethod = Utils.getMethod(component, methodName); if (invokeMethod != null)