Android——ViewModel需要有参构造报错

bash 复制代码
Process: com.wyg.util, PID: 32767
java.lang.RuntimeException: Cannot create an instance of class com.wyg.xc.XCViewModel                                                                                            
at androidx.lifecycle.ViewModelProvider$NewInstanceFactory.create(ViewModelProvider.kt:204)

原因是自己ViewModel继承类的构造

java 复制代码
public XCViewModel(String name) {
	this.name=name
}

解决方法

新建Factory类实现ViewModelProvider.Factory

java 复制代码
public class XCViewModelFactory implements ViewModelProvider.Factory {
    private String name;

    public XCViewModelFactory(String name) {
        this.name = name;
    }

    @NonNull
    @Override
    public <T extends ViewModel> T create(@NonNull Class<T> modelClass) {
        if (modelClass.isAssignableFrom(XCViewModel.class)) {
            return (T) new XCViewModel(name);
        }
        throw new IllegalArgumentException("Unknown ViewModel class");
    }
}

最后在Fragment继承类或Activity中使用

java 复制代码
    @Override
    public void onViewCreated(@NonNull View view, @Nullable Bundle savedInstanceState) {
    	String name="张三";
        XCViewModelFactory factory = new XCViewModelFactory(name);
        xcViewModel = new ViewModelProvider(this, factory).get(XCViewModel.class);
        }
相关推荐
编程洪同学18 分钟前
Spring Boot 中实现自定义注解记录接口日志功能
android·java·spring boot·后端
氤氲息2 小时前
Android 底部tab,使用recycleview实现
android
Clockwiseee3 小时前
PHP之伪协议
android·开发语言·php
小林爱3 小时前
【Compose multiplatform教程08】【组件】Text组件
android·java·前端·ui·前端框架·kotlin·android studio
小何开发4 小时前
Android Studio 安装教程
android·ide·android studio
开发者阿伟4 小时前
Android Jetpack LiveData源码解析
android·android jetpack
weixin_438150995 小时前
广州大彩串口屏安卓/linux触摸屏四路CVBS输入实现同时显示!
android·单片机
CheungChunChiu5 小时前
Android10 rk3399 以太网接入流程分析
android·framework·以太网·eth·net·netd
木头没有瓜6 小时前
ruoyi 请求参数类型不匹配,参数[giftId]要求类型为:‘java.lang.Long‘,但输入值为:‘orderGiftUnionList
android·java·okhttp
键盘侠0076 小时前
springboot 上传图片 转存成webp
android·spring boot·okhttp