Android 数据绑定recyclerview适配器从livedata接收到空列表

Android 数据绑定recyclerview适配器从livedata接收到空列表,android,mvvm,android-recyclerview,android-databinding,android-livedata,Android,Mvvm,Android Recyclerview,Android Databinding,Android Livedata,我想向recyclerview提供元素和livedata的列表。我使用了数据绑定适配器,当我想向适配器发送数据时,列表会从livedata返回null。整个代码如下。 谢谢 我调试了代码,看到数据从AppDbHelper.java到HomeViewmodel.java并设置为活动数据时,bindingadapter没有更改。因此,尽管livedata不为null,但数据绑定适配器(heartRateResultsModels)上的arraylist为null并导致应用程序崩溃 1.fragmen

我想向recyclerview提供元素和livedata的列表。我使用了数据绑定适配器,当我想向适配器发送数据时,列表会从livedata返回null。整个代码如下。 谢谢

我调试了代码,看到数据从AppDbHelper.java到HomeViewmodel.java并设置为活动数据时,bindingadapter没有更改。因此,尽管livedata不为null,但数据绑定适配器(heartRateResultsModels)上的arraylist为null并导致应用程序崩溃

1.fragment_home.xml


2.BaseFragment.java

公共抽象类BaseFragment扩展了Fragment{
受保护的碎片导航MFFragmentNavigation;
私人基础活动能力;
私人视图mRootView;
私有T mViewDataBinding;
私人V MVIEW模型;
公共抽象int getBindingVariable();
公开摘要
@布局
int getLayoutId();
公共摘要V getViewModel();
@凌驾
公共void-onAttach(上下文){
super.onAttach(上下文);
if(BaseActivity的上下文实例){
BaseActivity=(BaseActivity)上下文;
这个。活动=活动;
activity.onFragmentAttached();
}
if(片段导航的上下文实例){
MFFragmentNavigation=(FragmentNavigation)上下文;
}否则{
抛出新的RuntimeException(context.toString()
+“必须实现OnFragmentInteractionListener”);
}
}
@凌驾
创建时的公共void(@Nullable Bundle savedInstanceState){
performDependencyInjection();
super.onCreate(savedInstanceState);
mViewModel=getViewModel();
设置选项菜单(错误);
}
@凌驾
创建视图时的公共视图(@NonNull LayoutInflater inflater、ViewGroup容器、Bundle savedInstanceState){
mViewDataBinding=DataBindingUtil.inflate(充气器,getLayoutId(),容器,false);
mRootView=mViewDataBinding.getRoot();
返回mRootView;
}
public-BaseActivity getBaseActivity(){
回报率;
}
public T getViewDataBinding(){
返回mViewDataBinding;
}
公共无效隐藏板(){
if(mActivity!=null){
mActivity.hideKeyboard();
}
}
公共布尔值isNetworkConnected(){
return mActivity!=null&&mActivity.isNetworkConnected();
}
public void openActivityOnTokenExpire(){
if(mActivity!=null){
mActivity.openActivityOnTokenExpire();
}
}
私有void performDependencyInjection(){
雄激素支持注射。注射(此);
}
公共接口回调{
void onFragmentAttached();
void onfragmentseparated(字符串标记);
}
}
3.homepragment.java

公共类HomeFragment扩展BaseFragment实现HomeNavigator{
碎片家庭装订;
@注入
直线布局经理mLayoutManager;
@注入
心率结果自适应;
@注入
ViewModelProviderFactory工厂;
私有HomeViewModel mHomeViewModel;
公共静态HomeFragment newInstance(){
返回新的HomeFragment();
}
@凌驾
public int getBindingVariable(){
返回BR.viewModel;
}
@凌驾
public int getLayoutId(){
返回R.layout.fragment_主页;
}
@凌驾
公共HomeViewModel getViewModel(){
mHomeViewModel=ViewModelProviders.of(this,factory).get(HomeViewModel.class);
返回null;
}
@凌驾
创建时的公共void(@Nullable Bundle savedInstanceState){
super.onCreate(savedInstanceState);
mHomeViewModel.setNavigator(此);
}
@凌驾
已创建公用void onview(@NonNull视图,@Nullable Bundle savedInstanceState){
super.onViewCreated(视图,savedInstanceState);
MFFragmentHomeBinding=getViewDataBinding();
设置();
}
私有无效设置(){
mLayoutManager.setOrientation(RecyclerView.VERTICAL);
MFFragmentHomeBinding.fragmentHomeRecyclerView.setLayoutManager(mLayoutManager);
MFFragmentHomeBinding.fragmentHomeRecyclerView.setItemAnimator(新的DefaultItemAnimator());
MFFragmentHomeBinding.fragmentHomeRecyclerView.setAdapter(mAdapter);
}
@凌驾
公共无效句柄错误(可丢弃可丢弃){
}
}
4.BaseViewModel.java

公共类BaseViewModel扩展了ViewModel{
私有最终数据管理器mDataManager;
私有最终可观察到的错误加载=新的可观察到的错误加载(假);
专用最终计划提供程序mSchedulerProvider;
专用复合可编程组件mCompositeDisposable;
私家侦探;
公共BaseViewModel(DataManager DataManager,
计划提供者(计划提供者){
this.mDataManager=dataManager;
this.mSchedulerProvider=schedulerProvider;
this.mCompositeDisposable=新的CompositeDisposable();
}
@凌驾
已清除的受保护的void(){
mCompositeDisposable.dispose();
super.onCleared();
}
公共CompositeDisposable getCompositeDisposable(){
返回mCompositeDisposable;
}
公共数据管理器getDataManager(){
返回mDataManager;
}
public observebolean getIsLoading(){
返回错误加载;
}
公共无效设置isLoading(布尔isLoading){
加载错误。设置(卸载);
}
公共N getNavigator(){
返回mNavigator.get();
}
public void setNavigator(N navigator){
this.mNavigator=新的WeakReference(导航器);
}
公共SchedulerProvider getSchedulerProvider(){
返回mSchedulerProvider;
}
}
5.HomeViewModel.java

pu
@Override
    public void onViewCreated(@NonNull View view, Bundle savedInstanceState) {
        super.onViewCreated(view, savedInstanceState);
        mViewDataBinding.setVariable(getBindingVariable(), mViewModel);
        mViewDataBinding.setLifecycleOwner(this);
        mViewDataBinding.executePendingBindings();
    }
<data>
<variable
    name="viewModel"
    type="com.felixfavour.ViewModel" />
</data>
listViewModel = ViewModel(this).get(ListViewModel::class)
bindingObj.viewModel = listViewModel
bindingObj.setLifeCycleOwner = this