我的片段沟通不好吗?

时间:2018-08-06 08:48:11

标签: android android-fragments

因此,在工作中,我们在具有数据绑定的MVVM体系结构中有4个片段的活动。

InfoActivity
    ScreenOneFragment
    ScreenTwoFragment
    ScreenTreeFragment
    ScreenFourFragment

每个片段都是自己的视图模型,可以通过ViewModelProvider进行访问

ScreenOneVM
ScreenTwoVM
ScreenTreeVM
ScreenFourVM

ViewModelProvider是某种单例管理器,一旦有人请求一台虚拟机,便会构建此虚拟机,然后总是将这个实例提供给所有人。 (直到infoActivity死亡)

第一个问题:

当屏幕3发生特定变化时,我想更新屏幕4的一部分

ScreenFourFragment方法的OnActivityCreated中,

ScreenTreeVm请求ViewModelProvider。 检索到screenTreeVm后,片段将观察该VM的属性

screenTreeVm.getLastSelectedUserChoice().observe(this, this::updateLeftDrawer);

这个获取器就是这样,以确保每个人都使用相同的实例:

public MutableLiveData<UserChoice> getLastSelectedUserChoice() {
        if (null == this.lastUserChoice) {
            this.lastUserChoice = new MutableLiveData<>();
        }
        return this.lastUserChoice;
    }

这样,每当用户在第三屏幕中更改微调器的值时,第四屏幕视图模型就会更新。

第二个问题:

MutableLiveData<Boolean> isUpdateRequired中有一个ScreenFourVM,有时其他分片会在其中设置一个值,以触发screenFour中的更新方法。

再次在OnActivityCreated的{​​{1}}方法中,将观察者置于该属性上(该属性位于ScreenFourFagment中)

(设置值时,观察者总是触发,即使该值与以前相同)

我不是很喜欢,因为这并不是“是否需要更新”

如果ScreenFourVm将其设置为true,则它将触发该方法 如果在ScreenOneFragment之后将其设置为true(虽然已经为true),则会触发该方法

但是isUpdateRequired的内容始终为true。


在我看来这是些意大利面混乱,有时某个片段将在screenFourvm中设置一个值来触发更改,有时screenFourVm将触发一个更改,因为它正在观察其他VM中的属性。

您将如何解决这个问题?

谢谢。

0 个答案:

没有答案