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 */)