组件自己的测试代码。当然我们还可以在src/main
下面书写一些各个组件都可能使用到的通用代码,src/main
的内容在其他productFlavor
目录下是可以访问的。
在实际项目中,我会给每个组件程序写一个MainActivity,MainActivity里面很简单,就是一排按钮,每一个按钮对应着组件接口中的一个方法。这样开发时很方便测试,开发完成时至少也能够保证组件基本可用,不太会出现别人一调用你的组件就出错的情况。
最后,运行某个组件时,需要在AS的Build Variants
中选择该组件定义的productFlavor
。
页面跳转
可以为每一个页面跳转定义一个接口方法:
public interface UserManagementInterface
{
//跳转到用户信息页面
String startToUserInfoPage(Context context);
}
然后在startToUserInfoPage
的实现中实现具体的跳转逻辑。
现在android上主流的页面导航方式有三种:
不同的页面对应不同Activity类型
在Activity中使用Fragment导航,在Activity中同时
使用Activity导航,和第一种不同的是Activity只充当Fragment的容器
针对第一种导航方式,在直接使用Intent跳转就可以,当然使用当前流行的ARouter也行。
针对第二种导航方式,把把FragmentManager放到Common中可能是比较好的办法。如果有更好的办法,感谢分享。
我个人比较喜欢第三种导航方式,在项目中也是用的这种导航方式。第三种导航方式同时具备第一种和第二种导航方式的优点,当然它也有比较大的缺点。金无足赤,人无完人,选择合适的就好。
首先创建一个Activity用做Fragment的容器,比如就叫TheActivity。(命名规范中肯定不推荐用The,但是实际上项目中就这么个Activity,用The也不会造成什么理解困难)
TheActivity的启动参数至少要包含要包含的Fragment的名称(有了名称就可以通过反射创建Fragment),还要包含Fragment自身需要的参数。
核心代码很简单就像下面这样:
Fragment fragment = createFragment();//使用反射创建Fragment
getSupportFragmentManager().beginTransaction()
.replace(fragmentContainerId, fragment)
.commit();
有些东西核心思想很简单,但是实际项目中使用会暴漏很多问题。
比如需要在Activity中解析Intent参数,有多少个跳转你几乎就要写多少个解析方法,然后在Fragment中还要再解析一次。
人天性就不会喜欢做这种重复又毫无营养的事情,我抽空做了一个基于注解和AnnotationProcessor的方案,可以简化参数的传递和解析工作。感兴趣的同学可以移步:https://github.com/a3349384/FragmentLauncher
最后欢迎关注我的博客:http://zhoumingyao.cn/