【版权说明】
1. 请支持原创,转载请注明出处:https://blog.csdn.net/cbk861110/article/details/86665564
2. 项目源码请移步:https://github.com/caobaokang419/WeatherApp(欢迎Github Fork&Star,框架和技术实现不妥之处,请帮忙指正),谢谢!
-------------------------------------------
基于MVVM框架的高德天气APP:
MVVM框架和组件实现:
- LiveData :它是UI,例如Activity、Fragment,与数据之间的桥梁;可以在其内部处理数据业务逻辑,例如从网络层或者数据持久层获取数据、更新数据等。
一、 技术背景:
LiveData 为Android推荐使用的数据容器,自带实现观察者模式; 应用侧通过注册&实现 数据的订阅回调,数据变化时,自动回调UI,更新UI显示。
二、 实现方式(以主页的标题:城市名称 为例):
1. LiveData 数据容器 在ViewModel中定义:
public class MainActivityViewModel extends AndroidViewModel {
private MutableLiveData<CityBean> mCurCityBean = new MutableLiveData<>();
private MutableLiveData<List<CityBean>> mCityBeans = new MutableLiveData<>();
public void loadCurCityInfo(CityBean cityBean) {
mCurCityBean.setValue(cityBean);
}
public MutableLiveData<CityBean> getCurCityInfo() {
return mCurCityBean;
}
}
2. UI 注册LiveData的变化回调(WtMainActivity.java中实现):
private void updateCityTitleView() {
mViewModel.getCurCityInfo().observe(this, new Observer<CityBean>() {
@Override
public void onChanged(@Nullable CityBean cityBean) {
if (null != mActionBar) {
mActionBar.setTitle(cityBean.adrName);
}
mViewModel.queryCityWeather(cityBean);
}
});
}
3. 使用举例:LiveData 数据变化,自动触发2中天气查询(WtMainActivity.java中实现):
@Override
protected void onResume() {
if (mViewModel != null) {
mViewModel.loadCurCityInfo(new CityBean("深圳", "440300"));
}
super.onResume();
}
-------------------------------------------
文章目录(未完,待续):
一:android 应用子功能及移动框架总述 https://blog.csdn.net/cbk861110/article/details/86665564
二:android 高德天气API说明及城市天气查询实现 https://blog.csdn.net/cbk861110/article/details/86665655
三:android 自定义控件实现(ActionBar + PageIndicatorView) https://blog.csdn.net/cbk861110/article/details/86665790
四:android ViewPager实现左右页面滑动切换 https://blog.csdn.net/cbk861110/article/details/86665964
五:android应用权限动态申请 https://blog.csdn.net/cbk861110/article/details/86666321
六:android RecyclerView 封装及使用 https://blog.csdn.net/cbk861110/article/details/86666392
七:android Xutils3文件下载实现(高德天气城市配置) https://blog.csdn.net/cbk861110/article/details/86666573
八:android DiskLruCache 磁盘缓存 封装和使用 https://blog.csdn.net/cbk861110/article/details/86666664
九:android ThreadPoolExecutor线程池 封装及使用 https://blog.csdn.net/cbk861110/article/details/86667101
十:android 天气网络请求框架(retrofit2&okhttp3&Gson) 封装及使用 https://blog.csdn.net/cbk861110/article/details/86667375
十一:android RxAndroid(响应式编程) 异步网络请求实现 https://blog.csdn.net/cbk861110/article/details/86669178
十二:android DataBinding 数据和UI双向绑定实现 https://blog.csdn.net/cbk861110/article/details/86669708
十三:android room数据库 天气数据读写实现 https://blog.csdn.net/cbk861110/article/details/86670354
十四:android LiveData 使用方法(实现城市天气自动刷新) https://blog.csdn.net/cbk861110/article/details/86670531
十五:android ViewModel 使用方法 https://blog.csdn.net/cbk861110/article/details/86670703
十六:android 集成友盟消息推送机制(U-Push) https://blog.csdn.net/cbk861110/article/details/86683849
-------------------------------------------
【版权说明】
1. 请支持原创,转载请注明出处:https://blog.csdn.net/cbk861110/article/details/86665564
2. 项目源码请移步:https://github.com/caobaokang419/WeatherApp(欢迎Github Fork&Star,框架和技术实现不妥之处,请帮忙指正),谢谢!