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);
}
...
}