当前位置 : 主页 > 编程语言 > java >

jetpeck livedata上手实践——与 ObservableField的区别

来源:互联网 收集:自由互联 发布时间:2022-10-26
jetpeck livedata上手实践——与 ObservableField的区别 问题背景 在日常安卓开发过程中,我们经常会对有些数据进行更新,之前可能会用到ObservableField相关类来进行操作,比如一下demo:1)新

jetpeck livedata上手实践——与 ObservableField的区别

问题背景

在日常安卓开发过程中,我们经常会对有些数据进行更新,之前可能会用到ObservableField相关类来进行操作,比如一下demo: 1)新建类SysInfoObs,里面使用ObservableField<T>。可以定义多个属性。

public class SysInfoObs { public ObservableField<String> info1 = new ObservableField<>(Build.MANUFACTURER); public ObservableField<String> timeStr = new ObservableField<>(); public ObservableField<Long> time = new ObservableField<>(); }

2)布局中绑定我们定义的属性

<?xml version="1.0" encoding="utf-8"?> <layout xmlns:android="http://schemas.android.com/apk/res/android"> <data> <variable name="info" type="com.rustfisher.tutorial2020.databinding.data.SysInfoObs" /> </data> <LinearLayout android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="vertical" android:padding="16dp"> <TextView android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="@{info.info1}" /> <TextView android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="@{info.timeStr}" /> </LinearLayout> ... </layout>

3)activity中,新建DataBindingAct2类,持有SysInfoObs的对象。

import android.os.Bundle; import androidx.databinding.DataBindingUtil; import androidx.databinding.ObservableArrayList; import androidx.databinding.ObservableArrayMap; import com.rustfisher.tutorial2020.AbsActivity; import com.rustfisher.tutorial2020.R; import com.rustfisher.tutorial2020.databinding.data.SysInfoObs; import java.util.Timer; import java.util.TimerTask; public class DataBindingAct2 extends AbsActivity { private ActDataBinding2Binding binding; private SysInfoObs mSysInfo = new SysInfoObs(); private Timer mTimer; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); binding = DataBindingUtil.setContentView(this, R.layout.act_data_binding_2); binding.setInfo(mSysInfo); mTimer = new Timer(); mTimer.schedule(new TimerTask() { @Override public void run() { mSysInfo.timeStr.set("Time: " + System.currentTimeMillis()); mSysInfo.time.set(System.currentTimeMillis()); } }, 0, 500); } ... }

要更新数据时,需要调用ObservableField的set方法。 运行起来就可以看到更新UI的效果了。

问题分析

我们还可以使用LiveData进行数据监听和绑定,它不仅可以实现与ObservableField相同的功能,而且有以下好处: 1)ObservableField只有在数据发生改变时UI才会收到通知,而LiveData不同,只要你postValue或者setValue,UI都会收到通知,不管数据有无变化 2)LiveData能感知Activity的生命周期,在Activity不活动的时候不会触发,例如一个Activity不在任务栈顶部

实践demo

livedata一般和viewmodel结合使用,使用demo可以参考上篇介绍viewmodel的文章(https://blog.51cto.com/baorant24/5778708 ),和上面的ObservableField的demo可以对比感受。

上一篇:年底了,骗子们也要冲业绩了
下一篇:没有了
网友评论