JetPack入门(一)
JetPack
Jetpack是一套库、工具和指导,可以帮助开发人员更轻松地编写高质量的应用程序。这些组件帮助您遵循最佳实践,将您从编写样板代码中解放出来,并简化复杂的任务,这样您就可以专注于您关心的代码了
ViewModel&LiveData
ViewModel类被设计成以生命周期的方式存储和管理ui相关的数据。ViewModel类允许数据在配置更改(如屏幕旋转)后仍然存在。
LiveData是一个可观察的数据持有者类。与常规的可观察对象不同,LiveData是生命周期感知的,这意味着它尊重其他应用程序组件的生命周期,比如活动、片段或服务。这种意识确保LiveData只更新处于活动生命周期状态的应用程序组件观察者。
public class MyViewModelWithLiveData extends ViewModel {
// 数据
private MutableLiveData<Integer> likeNumber;
public MutableLiveData<Integer> getLikeNumber() {
if (likeNumber == null){
likeNumber = new MutableLiveData<>();
likeNumber.setValue(0);
}
return likeNumber;
}
public void addLikeNumber(int add){
likeNumber.setValue(likeNumber.getValue()+add);
}
}
监听数据改变
mModelWithLiveData = new ViewModelProvider(this).get(MyViewModelWithLiveData.class);
mModelWithLiveData.getLikeNumber().observe(this, new Observer<Integer>() {
@Override
public void onChanged(Integer integer) {
//改变界面数据
mTextView.setText(String.valueOf(integer));
}
});
DataBinding
数据绑定库是一个支持库,允许您使用声明格式(而不是编程方式)将布局中的UI组件绑定到应用程序中的数据源。
在当前模块下的gradle文件下添加如下配置
android {
...
dataBinding {
enabled = true
}
}
用layout包装原布局代码
variable字段中name可以理解为ViewModel的实例对象,type指定ViewModel类
<?xml version="1.0" encoding="utf-8"?>
<layout xmlns:android="http://schemas.android.com/apk/res/android">
<data>
<variable
name="data"
type="com.example.collectiondemoandroid.MyViewModelWithLiveData"/>
</data>
<LinearLayout
......
</LinearLayout>
</layout>
- 绑定值
<TextView
android:id="@+id/textView"
android:text="@{String.valueOf(data.likeNumber)}"
/>
- 绑定方法
<ImageButton
android:id="@+id/upButton"
android:onClick="@{()->data.addLikeNumber(2)}"
/>
绑定视图
'ActivityMainBinding' 命名方式为layout的名称加Binding
ActivityMainBinding dataBinding;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
dataBinding = DataBindingUtil.setContentView(this,R.layout.activity_main);
// 获取控件 dataBinding.upButton
//获取viewmodel对象
mModelWithLiveData = new ViewModelProvider(this).get(MyViewModelWithLiveData.class);
//设置数据
dataBinding.setData(mModelWithLiveData);
//设置监听
dataBinding.setLifecycleOwner(this);
}
Saved State module for ViewModel
当应用被系统Kill下次直接恢复上次的数据
使用也很简单,其实只需要将上面的MyViewModelWithLiveData进行如下的修改就行
- SavedStateHandle对象管理数据
- 添加构造函数传入 SavedStateHandle对象
SavedStateHandle方法如下
- get(String key)
- contains(String key)
- remove(String key)
- set(String key, T value)
- keys()
- getLiveData()
public class MyViewModelWithLiveData extends ViewModel {
final public static String LIKEKEY = "likenumber";
private SavedStateHandle mSavedStateHandle;
//构造函数
public MyViewModelWithLiveData(SavedStateHandle savedStateHandle){
mSavedStateHandle = savedStateHandle;
}
public MutableLiveData<Integer> getLikeNumber() {
if (!mSavedStateHandle.contains(LIKEKEY)){
mSavedStateHandle.set(LIKEKEY,0);
}
//以LiveData的形式去除
return mSavedStateHandle.getLiveData(LIKEKEY);
}
public void addLikeNumber(int add){
getLikeNumber().setValue(getLikeNumber().getValue()+add);
}
}