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);
        }
相关推荐
新缸中之脑11 分钟前
使用 AI 进行科学调试
android·人工智能·kotlin
QING6181 小时前
Android Gradle Plugin 9.0 升级指南:告别十年技术债,你准备好了吗?
android·kotlin·gradle
Ehtan_Zheng1 小时前
内存泄漏检测:发现隐藏泄漏的工具
android
拭心1 小时前
Android 17 来了!新特性介绍与适配建议
android
Kapaseker2 小时前
一杯美式理解 Inner Class
android·kotlin
三少爷的鞋3 小时前
为什么 Google 不再推荐 SharedPreferences?答案其实只有一个:锁
android
JMchen1233 小时前
企业级图表组件库完整实现
android·java·经验分享·笔记·canvas·android-studio
草明11 小时前
android 蓝牙连接-兼容旧版本
android
鹏多多.11 小时前
Flutter使用screenshot进行截屏和截长图以及分享保存的全流程指南
android·前端·flutter·ios·前端框架
Flywith2414 小时前
【每日一技】Warp Workflow 使用示例
android·前端