从Java活动初始化KotlinViewModel

cl25kdpy  于 2023-05-15  发布在  Java
关注(0)|答案(1)|浏览(125)

我想从java activity类初始化KotlinViewModel,但我不知道用什么作为ViewModelProvider.Factory.from的参数。
KotlinViewModel

class QueueViewModel : ViewModel() {   
    companion object {
        val Factory: ViewModelProvider.Factory = object : ViewModelProvider.Factory {
            override fun <T : ViewModel> create(
                modelClass: Class<T>,
                extras: CreationExtras
            ): T {
                return super.create(modelClass, extras)
            }
        }
    }
}

Java活动

public abstract class BaseQueueActivity extends BaseScreenActivity implements IModule {

    private QueueViewModel viewModel = new ViewModelProvider(
            this,
            ViewModelProvider.Factory.from(QueueViewModel.Companion.getFactory())
    ).get(QueueViewModel.class);
 }

当我使用这个时,我得到Cannot resolve method 'from(Factory)'错误消息。我应该使用什么作为正确的输入参数?

nszi6y05

nszi6y051#

因为from方法需要ViewModelInitializer而不是ViewModelProvider.Factory,正如您可以看到下面提到的源代码

所以你需要像下面提到的那样修改Kotlin代码

class QueueViewModel : ViewModel() {
    companion object {
        var initializer: ViewModelInitializer<QueueViewModel> = ViewModelInitializer(
            QueueViewModel::class.java
        ) {
            QueueViewModel()
        }
    }
}

在java方面你可以这样做

private QueueViewModel viewModel = new ViewModelProvider(
            this,
            ViewModelProvider.Factory.from(QueueViewModel.Companion.getInitializer())
    ).get(QueueViewModel.class);

相关问题