Android popBackStackImmediate 无法移除 Glide 的 SupportRequestManagerFragment

Exp*_* be 5 android kotlin android-glide

activity.supportFragmentManager.popBackStackImmediate()
Run Code Online (Sandbox Code Playgroud)

popBackStackImmediate 无法移除 Glide 的 SupportRequestManagerFragment,你知道为什么吗?还有其他方法可以从片段堆栈中删除 SupportRequestManagerFragment 吗?

sas*_*mar 11

这个案例片段使用 Activity 上下文而不是 Glide 的片段上下文。

Glide.with(getActivity()).load("url").into(imageView)
Run Code Online (Sandbox Code Playgroud)

更多细节参考这里

如果 SupportRequestManagerFragment 被添加到您的应用程序片段堆栈的 backstack 条目中,则在片段内部使用基本上下文调用 Glide 方法,因此它不会被添加并为后按创建问题..

Glide.with(this.getActivity().getBaseContext()).load("url").into(imageView)
Run Code Online (Sandbox Code Playgroud)


Epi*_*rce 2

因为Glide的Fragment并不在FragmentManager的操作backstack上。

参见代码

pendingSupportRequestManagerFragments.put(fm, current);
fm.beginTransaction().add(current, FRAGMENT_TAG).commitAllowingStateLoss(); // <-- no addToBackStack() call
Run Code Online (Sandbox Code Playgroud)

如果没有充分的理由,您可能也不应该接触 Glide 的内部结构,但从技术上讲,您可以调用fragmentManager.getFragments()、检查 null (它可以返回 null)、迭代列表、检查if(fragment instanceof SupportRequestManagerFragment),如果是,则使用片段事务将其删除。但这似乎不是一个好主意。^_^