Android 在RecyclerView中创建ViewModel的多个实例

Android 在RecyclerView中创建ViewModel的多个实例,android,mvvm,Android,Mvvm,我正在recyclerView的onBindViewHolder内创建一个ViewModel;但是,尽管创建了一个新的ViewModel实例,仍在使用相同的ViewModel。下面是它的外观: @Override public void onBindViewHolder(@NonNull final CatalogViewHolder holder, int position) { if(componentData != null){ holder.binding.s

我正在
recyclerView
onBindViewHolder
内创建一个
ViewModel
;但是,尽管创建了一个新的
ViewModel
实例,仍在使用相同的
ViewModel
。下面是它的外观:

 @Override
public void onBindViewHolder(@NonNull final CatalogViewHolder holder, int position) {

    if(componentData != null){
        holder.binding.setComponentData(componentData.get(position));
        holder.binding.setAdapter(adapter);
        CatalogAdapterViewModelFactory factory = new CatalogAdapterViewModelFactory(MyApp.getApplication(), componentData.get(position).getId());
        SliderViewModel sliderViewModel = ViewModelProviders.of(fragment, factory).get(SliderViewModel.class);

        sliderViewModel.getPayloadListObservable().observe(fragment, new Observer<SliderData>() {
            @Override
            public void onChanged(SliderData payloads) {
                adapter.updateAdapterInfo(payloads.getPayload());

            }
        });
    }
}
@覆盖
public void onBindViewHolder(@NonNull final CatalogViewHolder,int位置){
if(组件数据!=null){
holder.binding.setComponentData(componentData.get(position));
固定器.绑定.设置适配器(适配器);
CatalogAdapterViewModelFactory=new CatalogAdapterViewModelFactory(MyApp.getApplication(),componentData.get(position.getId());
SliderViewModel sliderViewModelProviders.of(片段,工厂).get(SliderViewModel.class);
sliderViewModel.getPayloadListObservable().observe(片段,新观察者(){
@凌驾
更改后的公共无效(SliderData有效载荷){
adapter.updateAdapterInfo(payloads.getPayload());
}
});
}
}

如何在同一片段/视图中创建
ViewModel
的新实例

视图模型与所有者关联,在本例中是
片段
。只要将相同的
片段
传递给factory方法,就会得到相同的viewmodel

您不应该使用arch组件中的
ViewModel
,每次都必须手动实例化它

你的问题是这条线

SliderViewModel sliderViewModel = ViewModelProviders.of(fragment, factory).get(SliderViewModel.class);
你需要这样的东西

SliderViewModel sliderViewmodel = new SliderViewModel( /* pass stuff here */)

ViewModel
s与所有者关联,在本例中是
片段。只要将相同的
片段
传递给factory方法,就会得到相同的viewmodel

您不应该使用arch组件中的
ViewModel
,每次都必须手动实例化它

你的问题是这条线

SliderViewModel sliderViewModel = ViewModelProviders.of(fragment, factory).get(SliderViewModel.class);
你需要这样的东西

SliderViewModel sliderViewmodel = new SliderViewModel( /* pass stuff here */)