JetPack 初体验
2019-03-19 本文已影响50人
霁逸lei
1.听到这个概念就开始搜索相关文章,看了好久总觉得不得劲,后来翻到官网的介绍看的很痛苦(英语渣没办法),看了个大概终于下定决心把官方的todoapp下载下来学习了好久好久,看的略懵,磕磕绊绊看懂了一部分,然后看到郭霖大神的coolweatherjetpack(https://github.com/guolindev/coolweatherjetpack),然后下下来准备膜拜,结果发现是kotlin版的看的半脸懵逼,于是决定对着练习敲个java版的出来。总算是大概看懂了基本玩法
大概说一下官网的一个锅,为了出现这个界面我下来3个androidstudio然而并没有
后来不经意间看到了这个
image.png
2.闲话不多说直接上
①开始的开始是在界面获取ViewModel
//Activity下
mViewModel = ViewModelProviders.of(this).get(TasksViewModel.class);
//fragment下,此处context需要和activity的一致才能获取到同一各viewModel对象
mViewModel = ViewModelProviders.of(getActivity()).get(TasksViewModel.class);
②然后就是ViewModel中处理获取数据发送数据的逻辑,此处就该介绍下一个主角LiveData,主要通过liveData.setValue()、liveData.postValue()传数据、liveData.observe()的回调方法收到传来的数据显示出来。
//Activity处理数据
mViewModel.getOpenTaskEvent().observe(this, new Observer<Event<String>>() {
@Override
public void onChanged(@Nullable Event<String> stringEvent) {
Toast.makeText(TasksActivity.this, stringEvent.getContentIfNotHandled(), Toast.LENGTH_SHORT).show();
}
});
public class TasksViewModel extends ViewModel {
private final MutableLiveData<Event<String>> mOpenTaskEvent = new MutableLiveData<>();
private final MutableLiveData<Event<List<String>>> mOpenTaskEvent2 = new MutableLiveData<>();
public LiveData<Event<String>> getOpenTaskEvent() {
return mOpenTaskEvent;
}
//调用 setValue 方法,Observer 的 onChanged 方法会在调用 serValue 方法的线程回调。而postValue 方法,Observer 的 onChanged 方法将会在主线程回调
void openTask(String taskId) {
mOpenTaskEvent.setValue(new Event<>(taskId));
}
void save(List<String> list){
mOpenTaskEvent2.postValue(new Event<List<String>>(list));
}
}
看懂了这些大概就能上手找项目开敲了,敲完就大概能知道怎么玩了
3.上Demo,请求天气这块有点小问题,不影响jetpack的学习,个人建议直接去看郭大神的kotlin版+java普通版的coolweather,没事敲几行,膜拜大佬...https://github.com/ChenLeizheng/MvvmTest.git