天天看点

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

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

           

问题分析

实践demo