千家信息网

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

发表于:2025-02-07 作者:千家信息网编辑
千家信息网最后更新 2025年02月07日,小编给大家分享一下Android如何通过ViewModel保存数据实现多页面的数据共享功能,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起
千家信息网最后更新 2025年02月07日Android如何通过ViewModel保存数据实现多页面的数据共享功能

小编给大家分享一下Android如何通过ViewModel保存数据实现多页面的数据共享功能,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!

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

实现的Demo

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

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

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

4、发现数据还是共享的

下面是具体实现步骤:

1、建立两个Fragment(使用了Binding 和 Navigation)

一点要添加Binding 和 Navigation 不然做不了

2、建立一个继承于ViewModel的类

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

下面是具体代码:

1、继承于ViewModel的类

package com.example.naviation01;import androidx.lifecycle.MutableLiveData;import androidx.lifecycle.ViewModel;public class MyViewMode extends ViewModel { private MutableLiveData number; public MutableLiveData getNumber(){ if(this.number == null){ this.number = new MutableLiveData<>(); this.number.setValue(0); } return this.number; } public void add(int x){ this.number.setValue(this.number.getValue()+x); if(this.number.getValue() < 0){ this.number.setValue(0); } }}

2、Fragment 主页

package com.example.naviation01;import android.os.Bundle;import androidx.databinding.DataBindingUtil;import androidx.fragment.app.Fragment;import androidx.fragment.app.FragmentController;import androidx.lifecycle.ViewModel;import androidx.lifecycle.ViewModelProvider;import androidx.lifecycle.ViewModelProviders;import androidx.navigation.NavController;import androidx.navigation.Navigation;import android.view.LayoutInflater;import android.view.View;import android.view.ViewGroup;import android.widget.SeekBar;import com.example.naviation01.databinding.FragmentHomeBinding;/** * A simple {@link Fragment} subclass. */public class HomeFragment extends Fragment { public HomeFragment() { // Required empty public constructor } @Override public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { // Inflate the layout for this fragment final MyViewMode myViewMode; myViewMode = ViewModelProviders.of(getActivity()).get(MyViewMode.class); FragmentHomeBinding binding; binding = DataBindingUtil.inflate(inflater,R.layout.fragment_home,container,false); binding.setData(myViewMode); binding.setLifecycleOwner(getActivity()); binding.seekBar.setProgress(myViewMode.getNumber().getValue()); binding.seekBar.setOnSeekBarChangeListener(new SeekBar.OnSeekBarChangeListener() { @Override public void onProgressChanged(SeekBar seekBar, int progress, boolean fromUser) { myViewMode.getNumber().setValue(progress); } @Override public void onStartTrackingTouch(SeekBar seekBar) { } @Override public void onStopTrackingTouch(SeekBar seekBar) { } }); binding.button.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { NavController controller = Navigation.findNavController(v); controller.navigate(R.id.action_homeFragment_to_detailFragment); } }); return binding.getRoot(); //return inflater.inflate(R.layout.fragment_home, container, false); }}

xml

数据 两个 篇文章 功能 页面 主页 代码 内容 数字 还是 不怎么 再次 大部分 更多 模式 步骤 界面 知识 行业 设计模式 数据库的安全要保护哪些东西 数据库安全各自的含义是什么 生产安全数据库录入 数据库的安全性及管理 数据库安全策略包含哪些 海淀数据库安全审计系统 建立农村房屋安全信息数据库 易用的数据库客户端支持安全管理 连接数据库失败ssl安全错误 数据库的锁怎样保障安全 数据库主动被动 苹果手机连接到服务器 dayz有什么好玩的仿官服务器 戴尔r710服务器买什么机柜 专业的直播软件开发 灵魂潮汐就新月一个服务器吗 oracle数据库安装 2018国家网络安全周口号 依那普利药物相互作用数据库 网络安全 重于泰山 计算机网络技术升本科要求 互联网热点科技有限公司 数据库不用sql语句筛选查询 韶关网络安全宣传 数据库中如何查询表的路径 在线棋牌软件开发公司电话 网络技术实训室网络拓扑图 网络存储服务器安全吗 网络安全责任观是指党委责任制 网络安全知识专题讲座方案 青岛青禾软件开发有限公司 网络技术规范 关键技术 正式服五区联盟选哪个服务器 oracle数据库备份控制 依那普利药物相互作用数据库 分布式数据库具体应用 税务局网络安全学习情况 枫之谷m日服服务器 58同城找服务器 铜仁市易舟软件开发
0