前言

  • 参考于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));            }        });    }}