Andriod --- JetPack (五):DataBinding + LiveData +ViewModel 简单实例
1.Andriod — JetPack (一):初識 JetPack
2.Andriod — JetPack (二):LifeCycle 的誕生
3.Andriod — JetPack (三):ViewModel 的誕生
4.Andriod — JetPack (四):BaseObservable 與 ObservableField 雙向綁定
5.Andriod — JetPack (五):DataBinding + LiveData +ViewModel 簡單實例
6.Andriod — JetPack (六):Room 增刪改查
7.Andriod — JetPack (七):Room + ViewModel + LiveData 增刪改查實例
一、DataBinding
1.讓布局頁面承擔了部分原本屬于頁面的工作,是頁面文件和布局耦合度進一步降低。頁面文件:Activity。布局:activity_main.xml
2.減少了很多 findViewById 與 OnClickListener
布局文件可以包含一些簡單的業務邏輯
二、LiveData
在 ViewModel 中的數據發生變化時通知頁面
LiveData 與 ObservableField 同樣可以實現雙向綁定
這里的 Model 層下面的例子未呈現,等過后學到了 JetPack - Room 自然就懂了
三、ViewModel
1.它是介于 View(視圖)和 Model(數據模型)直接的橋梁
2.使視圖和數據能夠分離,也能夠保持通信
https://blog.csdn.net/qq_43290288/article/details/123478346
四:DataBinding + LiveData +ViewModel 實例
在 build.gradle 中添加 DataBinding 支持
android {dataBinding {enabled = true} }自定義MyViewModel.java
import android.view.View;import androidx.lifecycle.MutableLiveData; import androidx.lifecycle.ViewModel;public class MyViewModel extends ViewModel {private MutableLiveData<Integer> aTeamScore;private MutableLiveData<Integer> bTeamScore;public MutableLiveData<Integer> getaTeamScore() {if(aTeamScore == null) {aTeamScore = new MutableLiveData<>();aTeamScore.setValue(0);}return aTeamScore;}public MutableLiveData<Integer> getbTeamScore() {if(bTeamScore == null) {bTeamScore = new MutableLiveData<>();bTeamScore.setValue(0);}return bTeamScore;}public void aTeamAdd(View view) {aTeamScore.setValue(aTeamScore.getValue() + 1);}public void bTeamAdd() {bTeamScore.setValue(bTeamScore.getValue() + 1);} }MainActivity.java
import androidx.appcompat.app.AppCompatActivity; import androidx.databinding.DataBindingUtil; import androidx.lifecycle.ViewModel; import androidx.lifecycle.ViewModelProvider;import android.database.DatabaseUtils; import android.os.Bundle;import com.example.mvvm20220312.databinding.ActivityMainBinding; import com.example.mvvm20220312.viewmodel.MyViewModel;public class MainActivity extends AppCompatActivity {@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);ActivityMainBinding binding = DataBindingUtil.setContentView(this, R.layout.activity_main); // ActivityMainBinding 對應 activity_main.xmlMyViewModel viewModel = new ViewModelProvider(this, new ViewModelProvider.AndroidViewModelFactory(getApplication())).get(MyViewModel.class);binding.setViewModel(viewModel); // DataBinding 與 ViewModel 綁定binding.setLifecycleOwner(this); // 要想在綁定類中使用 LiveData 對象,我們需要指定生命周期所有者來定義 LiveData 對象的范圍。在綁定類實例化后指定 activity 作為生命周期所有者}}activity_main.xml
<?xml version="1.0" encoding="utf-8"?> <layout 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"tools:context=".MainActivity"><data><variablename="viewModel"type="com.example.mvvm20220312.viewmodel.MyViewModel" /></data><androidx.constraintlayout.widget.ConstraintLayoutandroid:layout_width="match_parent"android:layout_height="match_parent"><TextViewandroid:id="@+id/textView2"android:layout_width="wrap_content"android:layout_height="wrap_content"android:text="@{String.valueOf(viewModel.getaTeamScore())}"android:textSize="36sp"tools:text="10"app:layout_constraintBottom_toBottomOf="parent"app:layout_constraintEnd_toEndOf="parent"app:layout_constraintHorizontal_bias="0.252"app:layout_constraintStart_toStartOf="parent"app:layout_constraintTop_toTopOf="parent"app:layout_constraintVertical_bias="0.174" /><TextViewandroid:id="@+id/textView3"android:layout_width="wrap_content"android:layout_height="wrap_content"android:text="@{String.valueOf(viewModel.getbTeamScore())}"android:textSize="36sp"tools:text="10"app:layout_constraintBottom_toBottomOf="parent"app:layout_constraintEnd_toEndOf="parent"app:layout_constraintHorizontal_bias="0.588"app:layout_constraintStart_toEndOf="@+id/textView2"app:layout_constraintTop_toTopOf="parent"app:layout_constraintVertical_bias="0.174" /><Buttonandroid:id="@+id/button"android:layout_width="wrap_content"android:layout_height="wrap_content"app:layout_constraintBottom_toBottomOf="parent"app:layout_constraintEnd_toEndOf="parent"app:layout_constraintHorizontal_bias="0.207"android:onClick="@{viewModel::aTeamAdd}"app:layout_constraintStart_toStartOf="parent"app:layout_constraintTop_toBottomOf="@+id/textView2"android:text="藍隊"app:layout_constraintVertical_bias="0.499" /><Buttonandroid:id="@+id/button2"android:layout_width="wrap_content"android:layout_height="wrap_content"android:text="紅隊"android:onClick="@{() -> viewModel.bTeamAdd()}"app:layout_constraintBottom_toBottomOf="parent"app:layout_constraintEnd_toEndOf="parent"app:layout_constraintHorizontal_bias="0.755"app:layout_constraintStart_toStartOf="parent"app:layout_constraintTop_toBottomOf="@+id/textView3"app:layout_constraintVertical_bias="0.499" /></androidx.constraintlayout.widget.ConstraintLayout> </layout>學習內容來自動腦學院~
總結
以上是生活随笔為你收集整理的Andriod --- JetPack (五):DataBinding + LiveData +ViewModel 简单实例的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Andriod --- JetPack
- 下一篇: Andriod --- JetPack