欢迎大家下载我个人开发的app安琪花园
使用
在项目的根目录下面的build.gralde添加maven仓库。
maven { url "https://dl.bintray.com/richzjc/maven" }
其次是在module的build.gradle引用
如果项目用的kotlin 请将annotationProcessor 改成kapt
annotationProcessor "com.richzjc:router_compiler:1.0.25"
implementation "com.richzjc:router_lib:1.0.25"
简介
该项目是在我同事写的路由库基础之上,做了二次封装。
同事写的路由地址
我二次封装后的地址是: 路由库地址
功能描述
- 可以支持给Activity配置路由
- 可支持给Fragment配置路由
- 可以给实现RouterCallback的类配置路由
使用步骤
- 在对应的gradle文件下面添加如下配置,(
注意: 一定是配置在defaultConfig下面
)
android {
defaultConfig {
javaCompileOptions {
annotationProcessorOptions {
arguments = [moduleName: project.getName()]
}
}
}
}
- 在activity的类上面添加注解
@BindRouter(urls = {"https://wwww.github.com"})
public class TestActivity extends Activity {
}
注解的上面还可以添加参数 比如:
@BindRouter(urls = { "https://github.com/leifzhang"}, weight=10)
public class TestActivity extends Activity {
}
- 在Callback上面添加注解
@BindRouter(urls = {"https://wwww.baidu.com"}, isRunnable = true)
public class SimpleCallBack implements RouterCallback {
@Override
public void run(RouterContext context) {
Toast.makeText(context.getContext(), "testing", Toast.LENGTH_SHORT).show();
}
}
- 最后一步
Router.sharedRouter().open(路由地址, Context);
注意: 路由地址最好是以schema://host/path这种结构组成
Fragment配置路由
为什么fragment要单独说呢? 因为fragment的路由涉及到运行时注解,而不是编译时注解。
fragment的路由的用途是:
比如一个页面用的Viewpager + fragment来实现的, 当给fragment配置路由后, 直接通过fragment的路由会跳转到对应的页面,并定位到对应的fragment
比如一个页面是用TabHost + fragment来实现,同样的也可以通过fragment的路由定位到对应的tab
第一步
给fragment配置路由
- 通过注解配置路由
@FragmentRouter(url = Global.NEWS_MAINFRAGMENT_ROUTER)
public class NewsMainFragment extends BaseTabFragment{
}
- 通过接口配置路由, 实现IFragmentRouter接口
public class LiveFragment extends BaseRecyclerViewFragment<LiveEntity, LiveRecyclerCallBack, LivePresenter> implements IFragmentRouter {
@Override
public String getFragmentRouter() {
Bundle bundle = getArguments();
String channel = "";
if(bundle != null){
channel = bundle.getString("key", "");
}
return Global.LIVE_TAB_LIVE_SUB_FRAGMENT + channel;
}
}
第二步, 注册路由
//Vip tab 的 脱水研报
FragmentRouterModel model18 = new FragmentRouterModel.Builder()
.nextFragmentRouter(Global.NEWS_VIP_ROUTER)
.nextFragmentRouter(Global.MEMBER_CLUB_DETAIL_ACTION + "dehydration")
.build();
//Vip tab 的 Vip 会员
FragmentRouterModel model19 = new FragmentRouterModel.Builder()
.nextFragmentRouter(Global.NEWS_VIP_ROUTER)
.nextFragmentRouter(Global.MEMBER_CLUB_DETAIL_ACTION + "gold")
.nextFragmentRouter(Global.NEWS_VIP_GOLD_SUB_ROUTER)
.build();
Router.map(Global.ALIEN_MAINACTIVITY_ACTION, MainActivity.class,
model18,
model19);
首先是给Activity设置路由, 如果要跳转到A页面的B Fragment里面的C Fragment,则
要分别给B Fragment和C Fragment设置路由,并且通过FragmentRouterModel设置进去。
第三步, 配置SubFragmentRouters注解
@SubFragmentRouters(fragmentType = SubFragmentType.VIEWPAGER_FRAGMENTS, widgetIdName ="vp_news_main", filedName = "fragments")
public class NewsMainFragment extends BaseTabFragment<NewsMainCallBack, NewsMainPresenter>{
}
比方说: 如果要跳转到B Fragment下面的子fragment,则需要在B Fragment上面配置SubFragmentRouters注解。
subFragmentRouter注解解释:
fragmentType: 目前只支持像tabHost,和 ViewPager这两种
widgetIdName: tabHost, ViewPager的xml文件里面的id名字
fieldName: 是针对ViewPager里面的fragment列表的名字。如(List<Fragment> fragments)
最后fragment的跳转
Router.sharedRouter().open(路由地址, Context);
公众号:
网友评论