前言
- 参考于BiliBili longway777:https://space.bilibili.com/13...
LiveData
介绍
LiveData也是属于架构部分的
LiveData的作用是:在底层数据库更改的时候通知视图,使其动态更新
起步
在开始之前首先介绍一下矢量图:
矢量图是在Android 5.0之后出现的,它的特点就是可以任意放大不会产生锯齿,而且比较小,特别适合于做我们界面上的图标
Android中有不少的矢量图图标,常见的用户界面的应该都有了
选择之后会出现在drawable
目录下
新建一个项目:LiveDataDemo
我们这次要是用ImageButton
,更加的好看一点,所以选择一个矢量图
这个矢量图是一个xml文件,在drawable中
再来一个
最终布局
新建一个类:
package com.bean;import androidx.lifecycle.MutableLiveData;import androidx.lifecycle.ViewModel;public class ViewModelWithLiveData extends ViewModel { //类型为MutableLiveData,泛型为Integer private MutableLiveData<Integer> likedNumber; public MutableLiveData<Integer> getLikedNumber() { if (likedNumber==null){ likedNumber = new MutableLiveData<>(); likedNumber.setValue(0); } return likedNumber; } public void addLikedNumber(int n){ likedNumber.setValue(likedNumber.getValue()+n); }}
LiveData
之所以可以通过数据的改变进行界面的刷新,就是通过likedNumber.setValue
来实现的
package com.bean;import androidx.appcompat.app.AppCompatActivity;import androidx.lifecycle.Observer;import androidx.lifecycle.ViewModelProvider;import android.os.Bundle;import android.view.View;import android.widget.ImageButton;import android.widget.TextView;public class MainActivity extends AppCompatActivity { ViewModelWithLiveData viewModel; TextView textView; ImageButton imageButtonLeft,imageButtonRight; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); textView = findViewById(R.id.textView); imageButtonLeft = findViewById(R.id.imageButtonLeft); imageButtonRight = findViewById(R.id.imageButtonRight); ViewModelProvider.Factory factory = ViewModelProvider.AndroidViewModelFactory.getInstance(getApplication()); ViewModelProvider viewModelProvider = new ViewModelProvider(this,factory); viewModel = viewModelProvider.get(ViewModelWithLiveData.class); imageButtonLeft.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { viewModel.addLikedNumber(1); } }); imageButtonRight.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { viewModel.addLikedNumber(-1); } }); //这里是非常重要的一句话,这里是用来监听likedNumber数据,因为可以使用getLikedNumber获得就可以使用这个来监听 //observe:观察 viewModel.getLikedNumber().observe(this, new Observer<Integer>() { @Override public void onChanged(Integer integer) { //如果发生改变,那么就将这个数据改变 textView.setText(String.valueOf(integer)); } }); }}