Shadow icon indicating copy to clipboard operation
Shadow copied to clipboard

插件支持Fragment吗?宿主是Activity,插件是fragment,然后宿主使用插件的fragment这样可以吗?

Open HeLiHuang opened this issue 2 years ago • 7 comments

我们的项目是这样的:主界面就是一个viewPager,viewPager里面有几个fragment,我们想把fragment做成插件的形式,这样的话,我们新开发一个新的Fragment,在主宿主APP不用升级的情况下,下载这个fragment的插件进行更新,加入到viewPager里面,这样能做到吗?

HeLiHuang avatar Nov 03 '21 01:11 HeLiHuang

目前的代码不支持。可以参考#319 之前的讨论。

宿主Activity加载插件Fragment,如果二者的Resource是不同的,即Context是不同的,我认为这个方向基本上是不用考虑的。因为从Fragment的设计上来看,它就是Activity的代码分片,是Activity代码的一部分。从逻辑上来说,Fragment和Activity的Context必须是一个。如果违背这个设计,我们很难做出完美的实现。比如通过反射修改私有的mHost字段。

shifujun avatar Nov 03 '21 02:11 shifujun

主界面就是一个viewPager,viewPager里面有几个fragment

如果假设主界面这个Activity没有什么自己的资源,只包含一个ViewPager,那为什么不把这个Activity整体动态化了呢?

从技术实现上来说,Shadow的Activity和Fragment都是依附于宿主Activity的,就是那个PluginContainerActivity。

shifujun avatar Nov 03 '21 02:11 shifujun

不 fragment是碎片,在activity得到拼接。fragment理论上应该不关心activity是谁

Daimhim avatar Jan 28 '22 03:01 Daimhim

设计理念是这样没错。但是Fragment的实现代码并没有和Activity解耦开来。它强依赖了Activity的Context。

如果你能写一个不依赖Activity的Context也能attach到那个Activity上面的Fragment,那Shadow就能按照你的方案自动重构插件的代码做到同样的事。

shifujun avatar Jan 28 '22 03:01 shifujun

@Daimhim 你的问题解决了吗?我有同样的需求,请问怎么解决

njzhangsan2013 avatar Dec 02 '22 09:12 njzhangsan2013

@njzhangsan2013 fragment本质是activity上的一个view碎片,但是通过和activity绑定使其具有了生命周期,宿主activity去加载插件中的fragment确实是违背了shadow的设计原则,理论上不支持也不应该支持,但是事在人为,在实际业务场景中这种需求很常见,通过一些特殊的方法是可以实现的,只需要解决如下问题即可: 1、插件fragment解析布局时需要使用自己的context 2、fragment中涉及到activity的操作需要需要使用宿主的activity

zhuqichao avatar Mar 17 '23 02:03 zhuqichao

这是来自QQ邮箱的假期自动回复邮件。   您好,我最近正在休假中,无法亲自回复您的邮件。我将在假期结束后,尽快给您回复。

njzhangsan2013 avatar Mar 17 '23 02:03 njzhangsan2013

这是来自QQ邮箱的假期自动回复邮件。   您好,我最近正在休假中,无法亲自回复您的邮件。我将在假期结束后,尽快给您回复。

njzhangsan2013 avatar Apr 22 '24 08:04 njzhangsan2013