kov*_*777 2 android viewmodel android-livedata android-architecture-components
我正在尝试使用新的android体系结构组件,但是一时我很困惑。
我创建了一个ViewModel类
public class BuyViewModel extends ViewModel {
private BuyRepository buyRepository;
private LiveData<Adverts> advertsLiveData;
private boolean isLoading;
private int currentPage;
@Inject
public BuyViewModel(BuyRepository buyRepository) {
this.buyRepository = buyRepository;
}
public void init(int currentPage) {
this.currentPage = currentPage;
if (this.advertsLiveData != null) {
return;
}
Timber.tag("logi").d("BuyViewModel > init -> ");
advertsLiveData = buyRepository.getAdverts(currentPage);
}
public LiveData<Adverts> getAdvertsLiveData() {
return advertsLiveData;
}
}
Run Code Online (Sandbox Code Playgroud)
在我的LifeCycleFragment中观察LiveData
@Override
public void onActivityCreated(@Nullable Bundle savedInstanceState) {
super.onActivityCreated(savedInstanceState);
buyViewModel = ViewModelProviders.of(this, viewModelFactory).get(BuyViewModel.class);
buyViewModel.init(1);
buyViewModel.getAdvertsLiveData().observe(this, adverts -> {
Timber.tag("logi").d("BuyFragment > onActivityCreated -> ");
assert adverts != null;
adapter.addMoreAdverts(adverts.getResults());
});
setupViews();
}
Run Code Online (Sandbox Code Playgroud)
但是,当我用另一个片段替换该片段并切换回该片段时,该方法onChange被调用了两次,并在中添加了相同数据的两部分rvAdapter。
我解决了这个!!!当我创建ViewModel类时,我将“ this” 1st参数传递给方法
buyViewModel = ViewModelProviders.of(**this**, viewModelFactory).get(BuyViewModel.class);
但是我需要传递“ getActivity()”,代码看起来像这样
buyViewModel = ViewModelProviders.of(**getActivity()**,viewModelFactory).get(BuyViewModel.class);
| 归档时间: |
|
| 查看次数: |
1209 次 |
| 最近记录: |