-
Notifications
You must be signed in to change notification settings - Fork 93
4. Page
gaowei edited this page Mar 13, 2022
·
4 revisions
该模块的目的是对Fragment展示的扩展,定义好ViewGroup宿主,按照3种不同的情况来展示Fragment;未来也会增加更多的场景
- Fragment容器中只同时存在一个Fragment实例
- 不耦合的前提下对Fragment进行切换和控制
@Router(path = "/fragment/first/.*")
public class MessageFragment extends Fragment {
}
RouterPageSingle pageRouter =
new RouterPageSingle(getSupportFragmentManager(), containerId);
// 注册监听,使得调用方可以控制
DRouter.register(
ServiceKey.build(IPageRouter.class)
.setAlias("router_page_single") // 设置一个别名,避免重复
.setLifecycleOwner(this), // 如果不绑定生命周期,需要手动解监听
pageRouter);
// 使用正常的ServiceLoader方式获取
IPageRouter pageRouter = DRouter.build(IPageRouter.class)
.setAlias("router_page_single")
.getService();
// 注册观察者
pageRouter.addPageObserver(new IPageRouter.IPageObserver() {
@Override
public void onPageChange(@NonNull IPageBean from, @NonNull IPageBean to) {
}
}, this);
// 切换页面,可以实现自己的IPageBean
router.showPage(new IPageBean.DefPageBean("/fragment/first/3"));
router.popPage();
- Fragment容器中以堆栈的形式存在多个Fragment实例
- 不耦合的前提下对Fragment进行切换和控制
- 使用方式基本类似RouterPageSingle
RouterPageStack pageRouter =
new RouterPageStack(getSupportFragmentManager(), containerId);
- 使用ViewPager承载Fragment
- 不耦合的前提下对Fragment进行切换和控制
- 使用方式基本类似RouterPageSingle
RouterPageViewPager pageRouter =
new RouterPageViewPager(getSupportFragmentManager(), viewPager);
// 添加数据
pageRouter.update(
new IPageBean.DefPageBean("/fragment/first/1"),
new IPageBean.DefPageBean("/fragment/first/2"),
new IPageBean.DefPageBean("/fragment/first/3"));
这部分的功能DRouter正在继续努力开发和迭代,会去支持更多的能力和场景