通过ViewModel实现的数据共享符合Android的MVC设计模式,将数据独立出来
1,主页面通过SeekBar来改变数字的值
2,点击进入就进入第二个界面,但是数据还是共享的
3,随便加两个数字上去,再次切换
4,发现数据还是共享的
1,建立两个片段(使用了绑定和导航)
一点要添加绑定和导航不然做不了
2,建立一个继承于视图模型的类
3分别在两个片段的代码中使用继承于ViewModel的那个类,就可以实现数据共享
<强>下面是具体代码:强>
1,继承于视图模型的类
包com.example.naviation01; 进口androidx.lifecycle.MutableLiveData; 进口androidx.lifecycle.ViewModel; 公开课MyViewMode延伸ViewModel { 私人MutableLiveData数量; 公共MutableLiveData getNumber () { 如果这一点。数量==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保存数据实现多页面的数据共享功能