Jetpack-LiveData初体验

2021-12-30  本文已影响0人  卫泽洪_70a7

我想从官网学习JetPack,结果是404。只能自己找视频学习。

LiveData是一个可观察的数据持有者类,不过它和其他的可观察对象不同,它会与生命周期相关联,比如Activity的生命周期,LiveData能确保仅在Activity处于活动状态下才会更新。也就是说当观察者处于活动状态,才会去通知数据更新。

优点:

下面便是LiveData在MVVM中的角色

image.png

现在的目标是:页面上放一个数字n,一个add按钮,一个sub按钮。

利用LifeData实现数字n的自增和自减操作。

activity_live_data.xml:

  <?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent">

    <TextView
        android:id="@+id/textView"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_marginTop="77dp"
        android:text="@string/textview"
        app:layout_constraintEnd_toEndOf="parent"
        app:layout_constraintStart_toStartOf="parent"
        app:layout_constraintTop_toTopOf="parent" />

    <Button
        android:id="@+id/button"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_marginStart="87dp"
        android:layout_marginTop="61dp"
        android:text="@string/btn_add"
        app:layout_constraintStart_toStartOf="parent"
        app:layout_constraintTop_toBottomOf="@+id/textView" />

    <Button
        android:id="@+id/button2"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_marginStart="46dp"
        android:text="@string/btn_sub"
        app:layout_constraintBaseline_toBaselineOf="@+id/button"
        app:layout_constraintStart_toEndOf="@+id/button" />
</androidx.constraintlayout.widget.ConstraintLayout>

LiveData使用

LiveData是配合ViewModel使用的:ViewModelWithData.java

public class ViewModelViewLiveData extends ViewModel {

    private MutableLiveData<Integer> number;

    public ViewModelViewLiveData(){
        number = new MutableLiveData<>();
        number.setValue(0);
    }

    public MutableLiveData<Integer> getNumber() {
        return number;
    }

    public void increase(){
        number.setValue(number.getValue() + 1);
    }

    public void decrease(){
        number.setValue(number.getValue() - 1);
    }
}

LiveDataActivity.java

public class LiveDataActivity extends AppCompatActivity {
    private ViewModelViewLiveData viewModelViewLiveData;
    private TextView textView;
    private Button btnAdd,btnSub;

    @Override
    protected void onCreate(@Nullable Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_live_data);

        textView = findViewById(R.id.textView);
        btnAdd = findViewById(R.id.button);
        btnSub = findViewById(R.id.button2);

        viewModelViewLiveData = new ViewModelProvider(this, new ViewModelProvider.NewInstanceFactory()).get(ViewModelViewLiveData.class);

        viewModelViewLiveData.getNumber().observe(this, new Observer<Integer>() {
            @Override
            public void onChanged(Integer integer) {
                textView.setText(String.valueOf(integer));
            }
        });

        btnAdd.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                viewModelViewLiveData.increase();
            }
        });

        btnSub.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                viewModelViewLiveData.decrease();
            }
        });
    }
}
上一篇 下一篇

猜你喜欢

热点阅读