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);
        }
相关推荐
灿飞屋1 小时前
Kotlin与Java虚拟机三:控制流
android·java·开发语言·后端·python·kotlin·安卓
疯华整猫2 小时前
我用 Trae 把 Android 内存账重算了一遍
android·性能优化·源码
TimeFine4 小时前
AI 编程工作流的设计:从人工判断到 AI裁判
android·ai编程
阿杰m4 小时前
Android源码第四章:Android 系统启动——App 的第一行代码从哪来?
android
疯华整猫8 小时前
混淆起初根本不是为了防破解:我用 Trae 把 Android 混淆这二十来年重跑了一遍
android·人工智能·计算机视觉
Carson带你学Android9 小时前
AI时代,你的 App 会被 Agent 这三种方式调用
android·ai编程
恋猫de小郭10 小时前
Flutter 下 AOT 一个你怎么都想不出来的 Bug ,JIT 正常的计算,在 AOT 居然算错了
android·前端·flutter
好的佩奇1 天前
Dart 之扩展方法
android·flutter·dart
三少爷的鞋1 天前
换个思路理解:非阻塞挂起
android
好的佩奇1 天前
蓝牙之经典蓝牙
android·flutter·蓝牙