1
0
mirror of https://github.com/godotengine/godot.git synced 2025-11-04 12:00:25 +00:00

Android: Ensure proper cleanup of the fragment

This commit is contained in:
ydeltastar
2025-08-19 00:24:59 -03:00
committed by ydeltastar
parent 8ebf8ae23c
commit 6a3d37ef1c
2 changed files with 25 additions and 1 deletions

View File

@@ -98,7 +98,16 @@ abstract class GodotActivity : FragmentActivity(), GodotHost {
} else {
Log.v(TAG, "Creating new Godot fragment instance.")
godotFragment = initGodotInstance()
supportFragmentManager.beginTransaction().replace(R.id.godot_fragment_container, godotFragment!!).setPrimaryNavigationFragment(godotFragment).commitNowAllowingStateLoss()
val transaction = supportFragmentManager.beginTransaction()
if (currentFragment != null) {
Log.v(TAG, "Removing existing fragment before replacement.")
transaction.remove(currentFragment)
}
transaction.replace(R.id.godot_fragment_container, godotFragment!!)
.setPrimaryNavigationFragment(godotFragment)
.commitNowAllowingStateLoss()
}
}

View File

@@ -126,6 +126,11 @@ public class GodotFragment extends Fragment implements IDownloaderClient, GodotH
@Override
public void onDetach() {
if (godotContainerLayout != null && godotContainerLayout.getParent() != null) {
Log.d(TAG, "Cleaning up Godot container layout during detach.");
((ViewGroup)godotContainerLayout.getParent()).removeView(godotContainerLayout);
}
super.onDetach();
parentHost = null;
}
@@ -233,11 +238,21 @@ public class GodotFragment extends Fragment implements IDownloaderClient, GodotH
return downloadingExpansionView;
}
if (godotContainerLayout != null && godotContainerLayout.getParent() != null) {
Log.w(TAG, "Godot container layout already has a parent, removing it.");
((ViewGroup)godotContainerLayout.getParent()).removeView(godotContainerLayout);
}
return godotContainerLayout;
}
@Override
public void onDestroy() {
if (godotContainerLayout != null && godotContainerLayout.getParent() != null) {
Log.w(TAG, "Removing Godot container layout from parent during destruction.");
((ViewGroup)godotContainerLayout.getParent()).removeView(godotContainerLayout);
}
godot.onDestroy(this);
super.onDestroy();
}