Jetpack四大组件:基础、架构、行为、界面
- ·LiveData属于Jetpack架构组件里面的,在底层数据库更改时通知视图
-
采用矢量绘图:点击红色按钮,+1;点击蓝色按钮,-1.
-
-
出现红色感叹号,需要在build.gradle里面添加一句话(将以下这句话复制到defaultConfig{}中):
-
-
此时,在ViewModel中,需要管理一个LiveData类型的数据:
-
private MutableLiveData<Integer> LikedNumber; //声明 ViewModelWithLiveData(){ LikedNumber = new MutableLiveData<>(); LikedNumber.setValue(0); //LinkedNumber是一个对象类型,要保证它不是空 }
-
还需要在MainActivity中设置一个观察者,来检测数据的变化:
-
viewModelWithLiveData.getLikedNumber().observe(this, new Observer<Integer>() {//设置一个观察者,来监听数据的变化 @Override public void onChanged(Integer integer) {//每次数据变化,textview就会相应刷新 textView.setText(String.valueOf(integer)); } });
运行结果(左图为点击红色按键:+1;右图为点击蓝色按键:-1):
-
·数据绑定DataBinding:以声明方式将可观察数据绑定到界面元素
做一个功能为按下按键后自增1的累加器,依然要创建一个ViewModel
结果:
对于界面上的每一个控件,都要有一个变量和它进行关联,这比较麻烦,而且在界面发生改变时,代码就需要大量修改,程序比较难维护。使用DataBinding就可以解决这样的问题。
要在build.gradle里面的defaultConfig{}里添加这样一句话:
buildFeatures{
dataBinding = true
}
activity_main.xml中,第二行代码旁的灯泡,点击,有个”Convert to data binding layout”选项,点击,会在文件中增加两对标签:
<layout><data></data></layout>
此时,Android Studio会自动帮忙创建一个ActivityMainBinding类,代码可写为:
public class MainActivity extends AppCompatActivity {
MyViewModel myViewModel;
ActivityMainBinding binding;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
binding = DataBindingUtil.setContentView(this,R.layout.activity_main);
myViewModel = new ViewModelProvider(this).get(MyViewModel.class);
binding.setData(myViewModel);
binding.setLifecycleOwner(this);
}
}
还需要在<data></data>标签中添加几行代码:
<data> <variable name="data" type="com.example.databinding.MyViewModel" /> </data>
结果为:
今天所学的LiveData和dataBinding操作都比较麻烦,也有些抽象,在学的过程中也遇到了一些问题,但是后来通过各种途径也都解决了,终于体会到Android开发也不是一件容易的事,后面还要把这两节的视频反复多看几遍。