美文网首页
Jetpack-LiveData初体验

Jetpack-LiveData初体验

作者: 卫泽洪_70a7 | 来源:发表于2021-12-30 14:45 被阅读0次

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

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

优点:

  • 确保UI与数据同步
  • 不会产生内存泄漏
  • 不会因为Activity停止而Crash
  • 不需要手动控制生命周期
  • 下面便是LiveData在MVVM中的角色

下面便是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();
            }
        });
    }
}

相关文章

  • Jetpack-LiveData初体验

    我想从官网学习JetPack,结果是404。只能自己找视频学习。 LiveData是一个可观察的数据持有者类,不过...

  • Jetpack-ViewModel

    Jetpack-Lifecycle Jetpack-LiveData ViewModel ViewModel是以能...

  • 【原创】jetpack-LiveData实现双向绑定原理

    jetpack-LiveData实现双向绑定原理 重要的行代码 mDbActivityBinding.lifecy...

  • 【原创】jetpack-LiveData实现双向绑定

    jetpack-LiveData实现双向绑定 先提一下使用androidx jetpack gradle 6.1....

  • Jetpack-LiveData

    Jetpack-Lifecycle LiveData LiveData是一种可观察的数据存储器类。与常规的可观察类...

  • Jetpack-LiveData

    LiveData实现生命周期感知及避免内存泄漏的原因 Android官方架构组件LiveData: 观察者模式领域...

  • Jetpack-LiveData

    概述 LiveData是一个可以在给定生命周期内观察到的数据持有者类。一个观察者可以与一个LifecycleOwn...

  • Jetpack-LiveData

    LiveData 是可被观察(observable)的数据源的包装类,可以配合Lifecycle感知程序组件( A...

  • yii初体验(7-15)

    yii初体验(7)视图 yii初体验(8)模块 yii初体验(9) 小部件widgets yii初体验(10) 前...

  • Jetpack-LiveData浅析

    一、 是什么 Google2018年推出的新架构,意图在统一UI组件与架构。 先说一些前置知识。 androidx...

网友评论

      本文标题:Jetpack-LiveData初体验

      本文链接:https://www.haomeiwen.com/subject/bkviqrtx.html