JetpackLiveData

78次阅读

共计 2246 个字符,预计需要花费 6 分钟才能阅读完成。

前言

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

    }
}


正文完
 0