栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

LiveDatade的基本使用

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

LiveDatade的基本使用

特征:
1.首先LiveData 其实与数据实体类是一样的东西,它负责暂存数据
2.其次LiveData 其实也是一个观察者模式的数据实体类,它可以跟它注册的观察者回调数据是否已经更新
3.LiveData 还能知晓它绑定的Activity或者Fragment的声明周期,它只会给前台活动的activity回调,这样可以放心的在它的回调方法里直接将数据添加到View,而不用担心会不会报错

LiveData 与MutableLiveData区别:
1.MutableLiveData的父类是LiveData
2.LiveData在实体类里可以通知指定某个字段的数据更新
3.MutableLiveData则是完全是整个实体类或者数据类型变化后才通知,不会细节到某个字段
LiveData不可变,MutableLiveData是可变的

DemoData.java

public class DemoData extends LiveData {
    private int x;
    private int y;

    public int getX() {
        return x;
    }

    public void setX(int x) {
        this.x = x;
        postValue(this);
    }

    public int getY() {
        return y;
    }

    public void setY(int y) {
        this.y = y;
        postValue(this);
    }
}

继承LiveData并且在泛型里写下你的实体类,注意的是:postValue(this),这个方法是用于回调数据更新的方法(在需要被观察的数据里添加)

创建ViewModel
需要在ViewModle实例化DemoData这个类(ViewModle是用于管理多个Activity或者Fragment数据的类)

public class DemoViewModel extends ViewModel {
    private DemoData data = new DemoData();

    public DemoData getData(){
        return data;
    }
}

在Activity或者Fragment中绑定

public class MainActivity extends AppCompatActivity {
    private static final String TAG = "MainActivity";
    private DemoViewModel mDemoViewModel;
    private Button mBtn;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        mBtn = findViewById(R.id.btn);
        //获取ViewModel,让ViewModel与此activity绑定
        mDemoViewModel = new ViewModelProvider(this,new ViewModelProvider.AndroidViewModelFactory(getApplication())).get(DemoViewModel.class);
        //注册观察者,观察数据的变化
        mDemoViewModel.getData().observe(this, new Observer() {
            @Override
            public void onChanged(DemoData demoData) {
                Log.d(TAG, "onChanged: " + demoData.getX());
            }
        });

        mBtn.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                mDemoViewModel.getData().setX(10);
            }
        });
    }
}

MutableLiveData

public class MutableLiveData extends LiveData {
    @Override
    public void postValue(T value) {
        super.postValue(value);
    }

    @Override
    public void setValue(T value) {
        super.setValue(value);
    }
}

注意:
postValue
1.此方法可以在其他线程中使用
2.如果在主线程执行发布的任务之前多次调用此方法,则仅将分配最后一个值
3.如果同时调用setValue(a)和postValue(b),一定是值b被a覆盖
setValue:此方法只能在主线里调用

因为MutableLiveData只是作用变量所以我们直接就可以在ViewModel里面实例化它,并且在泛型里标注变量的类型

public class DemoViewModelMutable extends ViewModel {
    private MutableLiveData  mString = new MutableLiveData<>();

    public MutableLiveData getString(){
        return mString;
    }

    public void setString(String s){
        mString.setValue(s);
    }
}

绑定

public class MainActivity extends AppCompatActivity {
    private static final String TAG = "MainActivity";
    private DemoViewModelMutable mDemoViewModel;
    private Button mBtn;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        mBtn = findViewById(R.id.btn);
        //获取ViewModel,让ViewModel与此activity绑定
        mDemoViewModel = new ViewModelProvider(this,new ViewModelProvider.AndroidViewModelFactory(getApplication())).get(DemoViewModelMutable.class);
        //注册观察者,观察数据的变化
        mDemoViewModel.getString().observe(this, new Observer() {
            @Override
            public void onChanged(String s) {
                Log.d(TAG, "onChanged: " + s);
            }
        });

        mBtn.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                mDemoViewModel.setString("hahahaha");
            }
        });
    }
}
转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/1028823.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号