这次主要学习了Navigation组件,附带学习其他2个组件,对作用和使用步骤简记如下
一、LiveData
使用到类:MutableLiveData
可观察的数据源,使用步骤
- 有MutableLiveData liveData;
- 创建Observer obs,在方法onChanged(T t)中把t中数据设置到UI;
- 用liveData.observe(owner,obs)激活obs并使它感知生命周期。owner 是实现感知生命周期类LifecycleOwner的子类,新的SDK中AppCompatActivity和Fragment已实现。
二、ViewModel
可看作保存UI数据的盒子,使用步骤
- 继承ViewModel MyViewModel;
- ViewModelProviders.of(activity/fragment).get(MyViewModel.class)得到UI持有的ViewModel句柄vModel;
- 通过句柄vModel操作ViewModel。
三、Navigation
导航控件,开启Android studio 可视化编辑非常明朗展示界面跳转关系
- 非常适用场景,单Activity多纵向父子导航关系Fragment;
- 一般适用场景,多Activity都是纵向父子导航关系;
- 不太适用场景,横向兄弟同级Activity或Fragment;
使用步骤:
- 绘制导航graph xml文件,添加action和跳转目的地,添加携带参数;
- 使用
NavigationUI.setupWithNavController()
绑定具有导航功能的控件; - 使用
Navigation.findNavController(view)
或NavHostFragment.findNavController(fragment)
得到NavController mController; mController.navigate(resId,args)
导航到目标。
四、总结
这三个组件学习与使用容易,前2个组件适用普遍场景,相较于常规模式编程在设计结构和效率方面都有显著助力。Navigation适用场景目前有前文所述不足,需要根据场景设计对应解决方案,其简化Fragment跳转切换简化跳转Intent目的很有吸引力。
五、DEMO
常见主页底部导航卡多fragment同级横向切换方案:
思路1:多个NavHost多个graph xml文件方案
https://github.com/LuoYang2412/MyAndroidxStudy.git
思路2:相信更好的解决方案一定存在