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

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个参数。

相关文章:

  • 基于Spring Boot,结合Redis缓存和RabbitMQ消息队列的站内信系统设计
  • Mybatis的#{}和${}
  • 自适应SQL计划管理(Adaptive SQL Plan Management)在Oracle 12c中的应用
  • AD(Altium Designer)三种方法导入图片
  • 动态内存分配算法对比:最先适应、最优适应、最坏适应与邻近适应
  • 论文笔记-WSDM2025-ColdLLM
  • Hadoop-HA(高可用)机制
  • 重写QListWidget/QListView的代理,以网格的形式展示Item
  • jvm中各个参数的理解
  • Ubuntu编译ZLMediaKit
  • react实例与总结(二)
  • ollama修改监听ip: 0.0.0.0
  • deepseek清华大学第二版 如何获取 DeepSeek如何赋能职场应用 PDF文档 电子档(附下载)
  • 计算机网络基础杂谈(局域网、ip、子网掩码、网关、DNS)
  • 分布式 IO 模块:水力发电设备高效控制的关键
  • 正则表达式特殊字符
  • Nginx 常用命令和部署详解及案例示范
  • arthas教程(还没有全部写完,有空更新)
  • QT事件循环
  • 【Spring详解五】bean的加载
  • 亚振家居控制权将变更:济南域潇集团实控人成新控股股东
  • 面对面倾听群众意见建议,及时回应解决群众“急难愁盼”问题!龚正在基层开展下访活动,调研城市更新
  • 五矿地产:今年要确保债务“不爆雷”、交付“不烂尾”
  • 美称中美贸易谈判仍在进行中,外交部:美方不要混淆视听
  • 因商标近似李小龙形象被裁定无效,真功夫起诉国家知产局,法院判了
  • 看展览|深濑昌久:一位超现实主义摄影者的三种意象