如何为 ViewPager 中的每个页面创建一个 ViewModel?

Zak*_*rdi 2 android android-architecture-lifecycle android-architecture-components

我有一个ViewPager,我在其中显示了PetFragment. 要创建 a 的新实例PetFragment,我调用PetFragment.newInstance(petId).

我想要一个单独的ViewModel实例petId。但ViewModelProvider.Factory#create()只将 aClass<T>作为参数。我如何实现这一目标?

Bry*_*ier 5

看一看ViewModelProvider.get(@NonNull String key, @NonNull Class<T> modelClass),您应该能够通过键存储特定类的多个 ViewModel。

ViewModelProvider.get(@NonNull Class<T> modelClass) 只需使用默认键调用第一个方法。

get 调用与ViewModelStorewhich交互,它是 a 的包装器HashMap<String, ViewModel>,它应该允许您ViewModel为相同类型的 Fragment存储各种s,只要每个 s 都有一个唯一的键来标识它应该显示的内容。