SavedStateHandle use temporarily stored data

When using Savedstate save data, turn off background processes, data will be retained
Here Insert Picture Description
first add it in the file build.gradle dependent

android {
        dataBinding.enabled = true
        。。。
    }
    dependencies {
    implementation 'androidx.lifecycle:lifecycle-extensions:2.2.0-rc02'
    。。。
}

Then create a class that inherits ViewModel, inside which there is a SavedStateHandle type of handle is used to save data
MyViewModel.java

package com.mrlove.viewmodelsavedstate;

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

public class MyViewModel extends ViewModel {
    private SavedStateHandle handle;

    public MyViewModel(SavedStateHandle handle){
        this.handle = handle;
    }

    public MutableLiveData<Integer> getNumber(){
        if (!handle.contains(MainActivity.KEY_NUMBER)){
            handle.set(MainActivity.KEY_NUMBER,0);  //判断Handle里面的值是否被初始化,如果没有,就赋值这个key的值为0
        }
        return handle.getLiveData(MainActivity.KEY_NUMBER);
    }

    public void add(int n){
        getNumber().setValue(getNumber().getValue()+n);
    }
}

Finally instantiation and binding parameters mainactivity in.
Mainactivity.java

package com.mrlove.viewmodelsavedstate;

import androidx.appcompat.app.AppCompatActivity;
import androidx.databinding.DataBindingUtil;
import androidx.databinding.ViewDataBinding;
import androidx.lifecycle.ViewModel;
import androidx.lifecycle.ViewModelProvider;
import android.os.Bundle;
import com.mrlove.viewmodelsavedstate.databinding.ActivityMainBinding;

public class MainActivity extends AppCompatActivity {

    public final static String KEY_NUMBER = "my_number";
    MyViewModel viewModel;
    ActivityMainBinding binding;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        binding = DataBindingUtil.setContentView(this,R.layout.activity_main);
        viewModel = new ViewModelProvider(this).get(MyViewModel.class);//新的方式获取ViewModel实例
        binding.setData(viewModel);//给前台data绑定数据
        binding.setLifecycleOwner(this);//观察者
    }
}

github reference code: https://github.com/Mrlove133481/ViewModelSavedState

Published 25 original articles · won praise 0 · Views 568

Guess you like

Origin blog.csdn.net/u011609120/article/details/103986237