Java 未触发MutableLiveData的观察者
我正在使用MutableLiveData开发一个活动,以使我的片段与从搜索中检索到的结果保持最新,但在结果列表更新后不会触发观察者 在主活动中,我有一个EditText,在其中键入我要搜索的内容,在它的正下方有一个ViewPager小部件,其中有三个选项,结果在三个不同的片段上细分为三个类别。当我第一次进入活动时,我运行初始搜索以检索数据并填充三个片段。这很好用 SearchActivity.java @凌驾 受保护的void onCreateBundle savedInstanceState{ super.onCreatesavedInstanceState; setContentViewR.layout.activity\u搜索; mViewModel=ViewModelProviders.ofthis.getSearchViewModel.class; /*初始化选项卡菜单*/ TabLayout tabSearchMenu=findviewbydr.id.tabSearchMenu; ViewPager vpSearch=findviewbydr.id.vpSearchResult; TabSearchPageAdapter TabSearchPageAdapter=新建TabSearchPageAdaptergetSupportFragmentManager,tabSearchMenu.getTabCount; vpSearch.setAdapterAbsearchPageAdapter; vpSearch.addOnPageChangeListenernew TabLayout.TabLayoutOnPageChangeListenertabSearchMenu; /*初始搜索*/ etxtSearch=findviewbydr.id.etxtSearch; etxtSearch.setOnEditorActionListenertextView,actionId,keyEvent->{ 如果actionId==EditorInfo.IME_ACTION_SEARCH | | actionId==EditorInfo.IME_ACTION_DONE ||keyEvent.getAction==keyEvent.ACTION_向下| | keyEvent.getAction==keyEvent.KEYCODE_回车{ mViewModel.searchTextetxtSearch.getText.toString; } 返回false; }; } SearchViewModel.java 公共类SearchViewModel扩展了ViewModel{ 私有MutableLiveData listProducts=new MutableLiveDatanew ArrayList; 私有列表MPProducts=新的ArrayList; [...] 公共无效搜索文本字符串文本{ //进行搜索。。。 // ... // ... //处理Json结果。 CompletionHandler CompletionHandler=内容,错误->{ 如果content!=null&&content.length>0{ Log.dTAG,content.toString; Log.dTAG,searchText:找到的结果。; listProducts=new-MutableLiveDatanew-ArrayList; MPProducts=新阵列列表; 试一试{ JSONArray products=content.getjsonarrayhis; 对于int i=0;iJava 未触发MutableLiveData的观察者,java,android,mvvm,mutablelivedata,Java,Android,Mvvm,Mutablelivedata,我正在使用MutableLiveData开发一个活动,以使我的片段与从搜索中检索到的结果保持最新,但在结果列表更新后不会触发观察者 在主活动中,我有一个EditText,在其中键入我要搜索的内容,在它的正下方有一个ViewPager小部件,其中有三个选项,结果在三个不同的片段上细分为三个类别。当我第一次进入活动时,我运行初始搜索以检索数据并填充三个片段。这很好用 SearchActivity.java @凌驾 受保护的void onCreateBundle savedInstanceState{
有什么想法吗?问题是您返回的是MutableLiveData的不同实例,但您的片段只观察到它在InitFragment方法中得到的第一个实例 您还将listProducts设置为MutableLiveData的多个实例,首先在声明站点,然后在t中 他搜索文本方法,而不仅仅是更新它所持有的值 为了详细说明,您不需要在getProductsList方法中进行null检查,因为在创建视图模型时,listProducts被初始化为MutableLiveData的新实例
现在,该MutableLiveData实例持有的值可能为null。。只有这个值应该通过setValue更新。对MutableLiveData值的任何空检查都可以在您在片段中创建的观察者中完成。我不是100%确定,但我相信Android团队会讨论您面临的问题。