关于replugin插件中fragment使用注意

最近因公司业务需要去看了一下市面上的插件,别的我就不多说了,replugin目前来看社区还是比较活跃,整个框架也比较稳定,只是刚开始用的时候,想用宿主去调用插件的fragment时候反复崩溃,

主要问题还是有两个方面:

第一是v4包的冲突问题,如果用的不是v4包的fragment,那就没事,如果是,那么

dependencies {
    compile 'com.qihoo360.replugin:replugin-plugin-lib:2.2.4'
    provided files('libs/android-support-v4.jar')
}

用provided来骗过编译,这个标签的意思其实就是编译的时候会加入,打包的时候不会带进包中,这种方式官方的demo中也有用上(他是单独抽离了一个fragment出来,我嫌弃麻烦,直接把v4包抽出来了,效果一样的)。

第二个问题就真的是头疼的要死了, 官方的demo中

关于replugin插件中fragment使用注意_第1张图片

关于replugin插件中fragment使用注意_第2张图片

第一个xml show 主要是给布局xml中去使用。第二个code show 就是用动态代码去获取然后显示,一开始我就天真的以为只用第二种方式就可以达到我要的效果,结果很难受的是,我删除了上面布局文件中的fragment,单独使用第二种方式加载,总是崩溃,我去找原因,发现

@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
    Log.d(TAG, "onCreateView() called with: inflater = [" + inflater + "], container = [" + container + "], savedInstanceState = [" + savedInstanceState + "]");
    /**
     * 需要注意不能使用inflatercontainer因为他们的Context是宿主的
     */
    return LayoutInflater.from(RePlugin.getPluginContext()).inflate(R.layout.main_fragment, container, false);
}

除了要用插件的上下文环境外最重要的是!!! 敲黑板!!!!

RePlugin.fetchViewByLayoutName("包名", "布局文件名字" , null);

一定得先把需要显示的fragment的view通过这种方式取出来,不然肯定会报错,这一点很重要,我没在官方文档上看见过,这里要感谢群里的一个小伙伴,人家研究了好久摸索出来的。

建议要接入这个插件的同学一定要进交流群,能少走很多弯路!

你可能感兴趣的:(关于replugin插件中fragment使用注意)