Jetpack————LiveData

前言

LiveData

介绍

LiveData也是属于架构部分的

LiveData的作用是:在底层数据库更改的时候通知视图,使其动态更新

起步

在开始之前首先介绍一下矢量图:

矢量图是在Android 5.0之后出现的,它的特点就是可以任意放大不会产生锯齿,而且比较小,特别适合于做我们界面上的图标

Android中有不少的矢量图图标,常见的用户界面的应该都有了

Jetpack————LiveData_第1张图片

选择之后会出现在drawable目录下

新建一个项目:LiveDataDemo

我们这次要是用ImageButton,更加的好看一点,所以选择一个矢量图

Jetpack————LiveData_第2张图片

这个矢量图是一个xml文件,在drawable中

Jetpack————LiveData_第3张图片

再来一个

Jetpack————LiveData_第4张图片

最终布局

Jetpack————LiveData_第5张图片

新建一个类:

package com.bean;

import androidx.lifecycle.MutableLiveData;
import androidx.lifecycle.ViewModel;

public class ViewModelWithLiveData extends ViewModel {

    //类型为MutableLiveData,泛型为Integer
    private MutableLiveData likedNumber;

    public MutableLiveData 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() {
            @Override
            public void onChanged(Integer integer) {
                //如果发生改变,那么就将这个数据改变
                textView.setText(String.valueOf(integer));
            }
        });

    }
}


你可能感兴趣的:(android)