[转]LiveData配合ViewModel简单使用

0 原文

https://blog.csdn.net/u011810352/article/details/81334339

LiveData是Google推出的一系列的框架组件的其中一个,它是一个可以被观察的数据持有类,能够感知Activity、Fragment等组件的生命周期。

一个观察者去观察LiveData后,当观察者的生命周期处于STARTED或RESUMED状态时(即onStart()、onResume()、onPause()),LiveData的数据发生变化,则会通知观察者;若观察者处于其他状态,即使LiveData的数据发生变化,也不会发出通知。

正是由于这一特性,因此LiveData可以做到仅在组件处于活跃状态时才进行更新UI的操作。

1. 添加依赖

dependencies {
    //...
    def lifecycle_version = "1.1.1"
    //ViewModel 和 LiveData
    implementation "android.arch.lifecycle:extensions:$lifecycle_version"
}

2. 简单使用demo

2.1 新建一个 ViewModel

package com.wu.su.livedatastudy;

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

public class TestModel extends ViewModel {

    // MutableLiveData 为可变数据
    private MutableLiveData instans;

    public MutableLiveData getInstans() {
        if (instans == null) {
            instans = new MutableLiveData<>();
        }

        return instans;
    }

}

2.2 调用实例

package com.wu.su.livedatastudy;

import androidx.appcompat.app.AppCompatActivity;
import androidx.lifecycle.Observer;
import androidx.lifecycle.ViewModelProviders;

import android.os.Bundle;
import android.util.Log;

import java.util.Observable;

public class MainActivity extends AppCompatActivity {

    private final static String TAG = "shz_debug";

    private TestModel testModel;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        initListener();
        // 提供了setValue(T)(主线程使用)和postValue(T)(子线程使用)两个方法来修改数据
        testModel.getInstans().setValue("onCreate");
    }

    private void initListener() {
        // testModel = new TestModel();
        /**
         * 使用 ViewModel 来创建对象
         * ViewModel跟普通Model流程都是一样的,只是创建对象时不一样而已。
         * Google建议LiveData配合ViewModel一起使用
         */
        testModel = ViewModelProviders.of(this).get(TestModel.class);

        testModel.getInstans().observe(this, new Observer() {
            @Override
            public void onChanged(String s) {
                Log.d(TAG, s);
            }
        });
    }

    @Override
    protected void onStart() {
        super.onStart();
        testModel.getInstans().setValue("onStart");
    }

    @Override
    protected void onResume() {
        super.onResume();
        testModel.getInstans().setValue("onResume");
    }

    @Override
    protected void onStop() {
        super.onStop();
        testModel.getInstans().setValue("onStop");
    }

    @Override
    protected void onDestroy() {
        super.onDestroy();
        testModel.getInstans().setValue("onDestroy");
    }


}

2.3 运行结果

2019-12-22 22:31:09.188 14071-14071/com.wu.su.livedatastudy D/shz_debug: onStart
2019-12-22 22:31:09.189 14071-14071/com.wu.su.livedatastudy D/shz_debug: onResume

你可能感兴趣的:(Android基础)