当前位置: 首页 > article >正文

Android Java创建ViewModel新api

背景

项目使用Java,创建ViewModel发现之前旧api不管用了。不要问为什么项目还要用Java,别问。老项目不让升级。

ViewModel创建新方式

新方式是因为依赖新版本库,其实用旧版本库就回到旧方式了。
依赖:

    def lifecycle_version = "2.5.0"
    // ViewModel
    implementation "androidx.lifecycle:lifecycle-viewmodel:$lifecycle_version"
    // LiveData
    implementation "androidx.lifecycle:lifecycle-livedata:$lifecycle_version"
    // Lifecycles only (without ViewModel or LiveData)
    implementation "androidx.lifecycle:lifecycle-runtime:$lifecycle_version"

从2.4开始换新方式,当然传递参数更容易了。

public class LauncherViewModel extends ViewModel {
    private static final String TAG = "LauncherViewModel";

    public static final ViewModelInitializer<LauncherViewModel> initializer = new ViewModelInitializer<>(
            LauncherViewModel.class,
            creationExtras -> {
                return new LauncherViewModel();
            }
    );
}    

传递参数的案例:
也可以参考传递参数,变得简单了

public class MyViewModel extends ViewModel {

    public MyViewModel(
        MyRepository myRepository,
        SavedStateHandle savedStateHandle
    ) { /* Init ViewModel here */ }

    static final ViewModelInitializer<MyViewModel> initializer = new ViewModelInitializer<>(
        MyViewModel.class,
        creationExtras -> {
            MyApplication app = (MyApplication) creationExtras.get(APPLICATION_KEY);
            assert app != null;
            SavedStateHandle savedStateHandle = createSavedStateHandle(creationExtras);

            return new MyViewModel(app.getMyRepository(), savedStateHandle);
        }
    );
}

初始化:

MyViewModel myViewModel = new ViewModelProvider(
    this,
    ViewModelProvider.Factory.from(MyViewModel.initializer)
).get(MyViewModel.class);

没错,就是这样,比之前多了2个参数。


http://www.kler.cn/a/564953.html

相关文章:

  • 数据结构与算法-图论-最短路-floyd扩展
  • Python Cookbook-2.15 用类文件对象适配真实文件对象
  • IO流(师从韩顺平)
  • Spark技术系列(二):深入理解RDD编程模型——从原理到生产实践
  • Vue 3 响应式系统深度探索:构建购物车应用 - 精通 `watch` 和 `computed` 的响应式数据
  • Nginx系列05(负载均衡、动静分离)
  • 学习笔记05——HashMap实现原理及源码解析(JDK8)
  • 小程序中头像昵称填写
  • StableDiffusion本地部署 2
  • react覆盖组件样式,不影响其他地方相同类名的组件
  • 【MySQL】数据库安装
  • Oracle RMAN duplicate 标准化文档
  • WPF高级 | WPF 多线程编程:提升应用性能与响应性
  • Ae 效果详解:粒子运动场
  • 渗透测试【海洋cms V9 漏洞】
  • JSP + Servlet 实现 AJAX(纯JS版)
  • cv2.solvePnP 报错 求相机位姿
  • Storage Gateway:解锁企业混合云存储的智能钥匙
  • Mysql表字段字符集未设置导致乱码问题
  • 构建逻辑思维链(CoT)为金融AI消除幻觉(保险理赔篇)