Android通过ViewModel保存数据实现多页面的数据共享功能

  

通过ViewModel实现的数据共享符合Android的MVC设计模式,将数据独立出来

  

  

1,主页面通过SeekBar来改变数字的值

  

 Android通过ViewModel保存数据实现多页面的数据共享功能

  

2,点击进入就进入第二个界面,但是数据还是共享的

  

 Android通过ViewModel保存数据实现多页面的数据共享功能

  

3,随便加两个数字上去,再次切换

  

 Android通过ViewModel保存数据实现多页面的数据共享功能

  

4,发现数据还是共享的

  

 Android通过ViewModel保存数据实现多页面的数据共享功能

  

  

1,建立两个片段(使用了绑定和导航)

  

一点要添加绑定和导航不然做不了

  

2,建立一个继承于视图模型的类

  

3分别在两个片段的代码中使用继承于ViewModel的那个类,就可以实现数据共享

  

<强>下面是具体代码:

  

1,继承于视图模型的类

  

        包com.example.naviation01;   进口androidx.lifecycle.MutableLiveData;   进口androidx.lifecycle.ViewModel;   公开课MyViewMode延伸ViewModel {   私人MutableLiveData数量;   公共MutableLiveDatagetNumber () {   如果这一点。数量==null) {   这一点。数量=new MutableLiveData<在();   this.number.setValue (0);   }   返回this.number;   }   公共空间添加(int x) {   this.number.setValue (this.number.getValue () + x);   如果(this.number.getValue () & lt;0){   this.number.setValue (0);   }   }   }      之前      

2,片段主页

  

        包com.example.naviation01;   进口android.os.Bundle;   进口androidx.databinding.DataBindingUtil;   进口androidx.fragment.app.Fragment;   进口androidx.fragment.app.FragmentController;   进口androidx.lifecycle.ViewModel;   进口androidx.lifecycle.ViewModelProvider;   进口androidx.lifecycle.ViewModelProviders;   进口androidx.navigation.NavController;   进口androidx.navigation.Navigation;   进口android.view.LayoutInflater;   进口android.view.View;   进口android.view.ViewGroup;   进口android.widget.SeekBar;   进口com.example.naviation01.databinding.FragmentHomeBinding;/* *   *简单的{@link片段}子类。   */公开课HomeFragment延伸片段{   公共HomeFragment () {//需要空的公共构造函数   }   @Override   公众视野>   & lt; & # 63; xml version=" 1.0 " encoding=" utf - 8 " & # 63;比;   & lt;布局xmlns: android=" http://schemas.android.com/apk/res/android "   xmlns:应用=" http://schemas.android.com/apk/res-auto "   xmlns:工具=" http://schemas.android.com/tools "比;   & lt; data>   & lt;变量   name="数据"   type=" com.example.naviation01。MyViewMode”/比;   & lt;/data>   & lt; FrameLayout   android: layout_width=" match_parent "   android: layout_height=" match_parent "   工具:上下文=?HomeFragment”比;   & lt; androidx.constraintlayout.widget.ConstraintLayout   android: layout_width=" match_parent "   android: layout_height=癿atch_parent”比;   & lt; TextView   android: id=癅 + id/textView”   android: layout_width=" wrap_content "   android: layout_height=" wrap_content "   android: layout_marginStart=" 8 dp "   android: layout_marginEnd=" 8 dp "   android: layout_marginBottom=" 8 dp "   android:文本=" @ {String.valueOf (data.number)}”   android: textSize=" 30 sp”   应用:layout_constraintBottom_toBottomOf=案浮?   应用:layout_constraintEnd_toEndOf=案浮?   应用:layout_constraintStart_toStartOf=案浮?   应用:layout_constraintTop_toTopOf=案浮?   应用:layout_constraintVertical_bias=" 0.255 "/比;   & lt; SeekBar   android: id=癅 + id/seekBar”   android: layout_width=" 0 dp”   android: layout_height=" wrap_content "   android: layout_marginStart=" 8 dp "   android: layout_marginTop=" 8 dp "   android: layout_marginEnd=" 8 dp "   android: layout_marginBottom=" 8 dp "   应用:layout_constraintBottom_toBottomOf=案浮?   应用:layout_constraintEnd_toEndOf=案浮?   应用:layout_constraintHorizontal_bias=" 0.0 "   应用:layout_constraintStart_toStartOf=案浮?   应用:layout_constraintTop_toTopOf=案浮?   应用:layout_constraintVertical_bias=" 0.456 "/比;   & lt;按钮   android: id=癅 + id/按钮”   android: layout_width=" wrap_content "   android: layout_height=" wrap_content "   android: layout_marginStart=" 8 dp "   android: layout_marginTop=" 8 dp "   android: layout_marginEnd=" 8 dp "   android: layout_marginBottom=" 8 dp "   android:文本=" @string/function01”   应用:layout_constraintBottom_toBottomOf=案浮?   应用:layout_constraintEnd_toEndOf=案浮?   应用:layout_constraintHorizontal_bias=" 0.498 "   应用:layout_constraintStart_toStartOf=案浮?   应用:layout_constraintTop_toTopOf=案浮?   应用:layout_constraintVertical_bias=" 0.679 "/比;   & lt;/androidx.constraintlayout.widget.ConstraintLayout>   & lt;/FrameLayout>   & lt;/layout>      

Android通过ViewModel保存数据实现多页面的数据共享功能