android - 从 AndroidViewModel 扩展时如何使用 ViewModelProvider.Factory

标签 android android-architecture-components android-viewmodel android-jetpack

我想向我的 ViewModel 发送一个额外的参数,但这是从 AndroidViewModel 扩展而来的。 如何将此参数添加到 ViewModelFactory 类?

View 模型

class ProjectViewModel(application: Application) : AndroidViewModel(application) {

    // need a param for project id...
}

View 模型工厂

class ProjectViewModelFactory(val projectId: Int): ViewModelProvider.Factory {

    override fun <T : ViewModel?> create(modelClass: Class<T>): T {
        // need to send this...
        return ProjectViewModel(projectId) as T
    }
}

注意:我注意到文档中说:AndroidViewModel 子类必须有一个接受 Application 作为唯一参数的构造函数。

所以我不知道做我想做的事情是否可行(或好)。

最佳答案

获取 View 模型:

        viewModel = ViewModelProviders.of(this,
                new BListFactory(getActivity().getApplication(), 1))
                .get(BListViewModel.class);

工厂:

class BListFactory extends ViewModelProvider.NewInstanceFactory {

    @NonNull
    private final Application application;

    private final long id;

    public BListFactory(@NonNull Application application, long id) {
        this.application = application;
        this.id = id;
    }

    @NonNull
    @Override
    public <T extends ViewModel> T create(@NonNull Class<T> modelClass) {
        if (modelClass == BListViewModel.class) {
            return (T) new BListViewModel(application, id);
        }
        return null;
    }
}

安卓 View 模型:

public class BListViewModel extends AndroidViewModel {

    private final long id;

    public BListViewModel(@NonNull Application application, final long id) {
        super(application);
        this.id = id;
    }
}

关于android - 从 AndroidViewModel 扩展时如何使用 ViewModelProvider.Factory,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51829280/

相关文章:

javascript - 如何使用phonegap将文件从一个文件夹移动/复制到android中的另一个文件夹?

android - 我怎么知道是否有导航栏?

Android:通过Activity中的LiveData和ViewModel观察Room DB

java - 将 room 中的行插入到主线程后如何获取插入的行 id

android - 更新列表元素内容时 Jetpack Compose : No recomposition happening,

android - View 模型不断创建实时数据的实例

java - 动态内容的 BaseAdaptor 用法

android - Dx 警告 : Ignoring InnerClasses .。对于 org.apache.tools.ant

android-room - Android 架构组件(MVVM) - 使用存储库模式处理远程和本地数据的理想方式

android - 架构组件刷新 LiveData