Android liveData与viewBinding使用教程

 更新时间:2022年11月17日 10:22:43   作者:Flynn_MIMD  
LiveData是一种可观察的数据存储器类,LiveData使用观察者模式,每当数据发生变化时,LiveData会通知 Observer对象,我们可以在这些 Observer 对象中更新UI,ViewModel对象为特定的界面组件提供数据,并包含数据处理业务逻辑,会配合LiveData一起使用

ViewModel

官方解释:保存UI数据的类,会在配置变更(如手机屏幕的旋转)后继续存在。

view Model不应持有context,否则在Activity销毁后View Model仍然持有Activity的context,造成内存泄漏;可以继承AndroidViewModel,或者选择application context

liveData

1.建立data类

public class Time {
    private MutableLiveData<Integer> seconds = new MutableLiveData<>();
    public MutableLiveData<Integer> getSeconds() {
        return seconds;
    }
}

2.继承View Model

public class TestViewModel extends ViewModel {
    private Time time;
    public TestViewModel(){
        time = new Time();
        // 修改liveData包装的数据,主线程用setValue,其他线程PostValue
        time.getSeconds().setValue(0);
    }
    public Time getLiveData(){
        return time;
    }
}

3.observe数据

private TestViewModel vm;
@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
    vm = new TestViewModel();
    vm.getLiveData().getSeconds().observe(this, new Observer<Integer>() {
        @Override
        public void onChanged(Integer integer) {
            EditText ed = findViewById(R.id.ed);
            ed.setText(""+integer);
        }
    });

viewBinding

1.build.gradle添加

buildFeatures {
    viewBinding true
}

根视图和所有有ID的视图都会根据xml文件名称,生成对应的Binding类

2. 在Activity中使用view Binding

ActivityMainBinding binding = ActivityMainBinding.inflate(getLayoutInflater());
View view = binding.getRoot();
setContentView(view);

如果找不到Binding类,可能是名字错了,顺序再调一下可能就对了

在Fragment中使用view Binding

 @Override
    public View onCreateView (LayoutInflater inflater,
                              ViewGroup container,
                              Bundle savedInstanceState) {
        ActivityMainBinding binding = ResultProfileBinding.inflate(inflater, container, false);
        View view = binding.getRoot();
        return view;
    }

由于fragment的生命周期更长,所以务必在destroy解除绑定

@Override
    public void onDestroyView() {
        super.onDestroyView();
        binding = null;
    }

到此这篇关于Android liveData与viewBinding使用教程的文章就介绍到这了,更多相关Android liveData与viewBinding内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • Service Activity的三种交互方式(详解)

    Service Activity的三种交互方式(详解)

    下面小编就为大家带来一篇Service Activity的三种交互方式(详解)。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2016-09-09
  • Flutter实现底部弹窗效果

    Flutter实现底部弹窗效果

    本文详细讲解了Flutter实现底部弹窗效果的方法,文中通过示例代码介绍的非常详细。对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2021-11-11
  • Android自定义视图实现手指移动轨迹

    Android自定义视图实现手指移动轨迹

    这篇文章主要为大家详细介绍了Android自定义视图实现手指移动轨迹,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2019-06-06
  • 详解Android平台JSON预览(JSON-handle)

    详解Android平台JSON预览(JSON-handle)

    这篇文章主要介绍了Android平台JSON预览(JSON-handle),小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2018-09-09
  • Android APP与媒体存储服务的交互

    Android APP与媒体存储服务的交互

    本文介绍如何在 Android 中,开发者的 APP 如何使用媒体存储服务(包含MediaScanner、MediaProvider以及媒体信息解析等部分),包括如何把 APP 新增或修改的文件更新到媒体数据库、如何在多媒体应用中隐藏 APP 产生的文件、如何监听媒体数据库的变化等等。
    2013-10-10
  • Android 连接蓝牙扫码器无输入框的实现

    Android 连接蓝牙扫码器无输入框的实现

    这篇文章主要介绍了Android 连接蓝牙扫码器无输入框的实现,本文通过实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2022-02-02
  • Android数据加密之Aes加密

    Android数据加密之Aes加密

    这篇文章主要为大家详细介绍了Android数据加密之Aes加密,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2016-09-09
  • Android PickerView实现三级联动效果

    Android PickerView实现三级联动效果

    这篇文章主要为大家详细介绍了Android PickerView实现三级联动效果,PickerView实现全国地址的选择,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2019-01-01
  • Android 系统语言切换监听和设置实例代码

    Android 系统语言切换监听和设置实例代码

    本篇文章主要介绍了Android 系统语言切换监听和设置实例代码,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2017-06-06
  • Flutter Android端启动白屏问题的解决

    Flutter Android端启动白屏问题的解决

    Flutter 应用在 Android 端上启动时会有一段很明显的白屏现象,白屏的时长由设备的性能决定,设备性能越差,白屏时间越长。这篇文章主要介绍了Flutter Android端启动白屏问题的解决。感兴趣的小伙伴们可以参考一下
    2018-07-07

最新评论