1. ViewModel 访问全局资源

2. 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"><data><variablename="data"type="com.example.viewmodelshp.MyViewModel" /></data><androidx.constraintlayout.widget.ConstraintLayoutandroid:layout_width="match_parent"android:layout_height="match_parent"tools:context=".MainActivity"><TextViewandroid:layout_width="wrap_content"android:layout_height="wrap_content"android:text="@{String.valueOf(data.getNumber())}"android:textSize="24sp"app:layout_constraintBottom_toBottomOf="parent"app:layout_constraintEnd_toEndOf="parent"app:layout_constraintStart_toStartOf="parent"app:layout_constraintTop_toTopOf="parent"app:layout_constraintVertical_bias="0.33"tools:text="100" /><Buttonandroid:id="@+id/button"android:layout_width="wrap_content"android:layout_height="wrap_content"android:onClick="@{()->data.add(1)}"android:text="@string/plus"android:textSize="20sp"app:layout_constraintBottom_toBottomOf="parent"app:layout_constraintEnd_toEndOf="parent"app:layout_constraintHorizontal_bias="0.233"app:layout_constraintStart_toStartOf="parent"app:layout_constraintTop_toTopOf="parent"app:layout_constraintVertical_bias="0.499" /><Buttonandroid:id="@+id/button2"android:layout_width="wrap_content"android:layout_height="wrap_content"android:onClick="@{()->data.add(-1)}"android:text="@string/minus"android:textSize="20sp"app:layout_constraintBottom_toBottomOf="parent"app:layout_constraintEnd_toEndOf="parent"app:layout_constraintHorizontal_bias="0.772"app:layout_constraintStart_toStartOf="parent"app:layout_constraintTop_toTopOf="parent"app:layout_constraintVertical_bias="0.499" /></androidx.constraintlayout.widget.ConstraintLayout>
</layout>

3. 资源文件 strings.xml

    <string name="plus">+</string><string name="minus">-</string><string name="data_key">DATA_KEY</string><string name="shp_name">SHP_NAME</string>

4. ViewModel 文件

public class MyViewModel extends AndroidViewModel {private final SavedStateHandle handle;private final String key = getApplication().getResources().getString(R.string.data_key);private final String shpName = getApplication().getResources().getString(R.string.shp_name);public MyViewModel(@NonNull Application application, SavedStateHandle handle) {super(application);this.handle = handle;if (!handle.contains(key)) {load();}}public LiveData<Integer> getNumber() {return handle.getLiveData(key);}void load() {SharedPreferences shp = getApplication().getSharedPreferences(shpName, Context.MODE_PRIVATE);int x = shp.getInt(key, 0);handle.set(key, x);}void save() {SharedPreferences shp = getApplication().getSharedPreferences(shpName, Context.MODE_PRIVATE);SharedPreferences.Editor editor = shp.edit();editor.putInt(key, getNumber().getValue() == null ? 0 : getNumber().getValue());editor.apply();}public void add(int x) {handle.set(key, getNumber().getValue() == null ? 0 : getNumber().getValue() + x);}
}

5. 调用测试

public class MainActivity extends AppCompatActivity {MyViewModel myViewModel;ActivityMainBinding binding;@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);binding = DataBindingUtil.setContentView(this, R.layout.activity_main);myViewModel = new ViewModelProvider(this).get(MyViewModel.class);binding.setData(myViewModel);binding.setLifecycleOwner(this);}@Overrideprotected void onPause() {super.onPause();myViewModel.save();}
}

AndroidViewModel相关推荐

  1. 使用AndroidViewModel初始化报错

    Caused by: java.lang.RuntimeException: Cannot create an instance of class vm 原因是无法创建带参数的构造方法,原因是 Vie ...

  2. Cannot create an instance of class AndroidViewModel (androidx ViewModelProvider AndroidViewModel)

    使用 androidx viewmodel 2.2.0 后,对 ViewModel 的创建有一些变化 原:ViewModelProviders.of(activity).get(ViewModel.c ...

  3. android框架连接mysql_Android:ROOM数据库框架

    ROOM ROOM对Sqlite进行了封装,直接使用ROOM来进行数据库访问. ROOM数据库查询可以直接返回LiveData对象,每次CRUD都会自动更新该LiveData,LiveData始终是数 ...

  4. [Android Pro] AndroidX重构和映射

    原文地址:https://developer.android.com/topic/libraries/support-library/refactor https://blog.csdn.net/ch ...

  5. Android Jetpack组件之 Paging使用-源码

    1.前言 最近简单看了下google推出的框架Jetpack,感觉此框架的内容可以对平时的开发有很大的帮助,也可以解决很多开发中的问题,对代码的逻辑和UI界面实现深层解耦,打造数据驱动型UI界面. A ...

  6. Android Jetpack组件之ViewModel使用

    1.前言 最近简单看了下google推出的框架Jetpack,感觉此框架的内容可以对平时的开发有很大的帮助,也可以解决很多开发中的问题,对代码的逻辑和UI界面实现深层解耦,打造数据驱动型UI界面. A ...

  7. Android 架构组件 - 让天下没有难做的 App

    Google 为了帮助 Android 开发者更快更好地开发 App,推出了一系列组件,这些组件被打包成了一个整体,称作 Android Jetpack,它包含的组件如下图所示: 老的 support ...

  8. Android Architecture Components Part2:LiveData

    感谢你的再次光临,欢迎来到Android Architecture Components(ACC)系列文章.上篇文章我们一起讨论了Room,通过Room我们能够方便的操作App的数据库.如果你的App ...

  9. ViewModel优雅的弹加载窗和获取Context

    前言 目前安卓开发一般都是用的mvvm模式,Jetpack的ViewModel是必不可少的一部分,而vm的生命周期要比Activity和Fragment长的,所以其一般不推荐其直接持有A或F,因为可能 ...

最新文章

  1. 字节跳动的5条远程办公最佳实践
  2. 学习 jQuery UI
  3. CF396C On Changing Tree
  4. python手机版打了代码运行不了-三款可以在安卓手机上运行Python代码的软件
  5. Vue项目中获取数据后使用swiper轮播,无法轮播且 autoplay 和 loop 失效问题!
  6. 如何为 Horizon View 配置 VMware VSAN?
  7. ap6212 Linux 蓝牙,替代正基AP6212、AP6330的SDIO WiFi+UART蓝牙组合
  8. oracle不能访问管理页面,Oracle Grid Control CONSOLE无法打开9i数据库的管理维护页面...
  9. Node.js + Consul 实现服务注册、健康检查、配置中心
  10. [原]gcc 中c实现所定义的特征
  11. adobe黑体std能商用_adobe黑体std字体下载
  12. 一个好用的不基于时间的同步文件的软件 —— Allway sync 文件同步
  13. 旅游网之后台管理系统
  14. CAD字体显示不出来怎么办?
  15. wav用matlab打不开,Matlab如何读取wav文件,为什么wavread不行啊
  16. dump java崩溃自动 不生成_Java如何生成Heap Dump及OOM问题排查
  17. 这几款视频语音转文字软件你值得拥有
  18. Spreadsheet电子表格控件安装及用法总结
  19. 深度学习 - 其本质是什么?
  20. Windows上使用VLC插件的方式在IE浏览器上播放RTSP视频流

热门文章

  1. 【安装Linux(巨详细步骤从VMware到安装Linux)】
  2. [NOIP2012 普及组] 寻宝题解
  3. 【方法】数据增强(Data Augmentation)
  4. 抖音世界杯直播的低延迟是怎么做到的?
  5. iOS双系统版本发布,iOS15首个公测版 + beta2(修正版)
  6. 性能测试:个人和公司性能测试成长阶段
  7. Windows服务搭建web网站
  8. JavaScript基础细讲
  9. 【Android抓包】- Stetho
  10. 基于VB的Catia的二次开发:(1)启动Catia