当前位置: 首页 > 知识库问答 >
问题:

传递多个ARG的可观察更新

蓝逸仙
2023-03-14

当控制器对DataModel中的String statusText进行更改时,我调用setChanged()&notifyObservers(This.statusText),然后在Display类中调用update(Observable o,Object arg)。

我的问题是,当我有多个字符串用于不同的标签时,我应该如何继续?我的第一个想法是将所有字符串放入一个列表中,然后更新方法看起来如下所示(这是不是太多耦合了?):

    if (arg != null && arg instanceof String[]) {
        Platform.runLater(new Runnable() {
            @Override
            public void run() {
                String[] strings = (String[]) arg;
                status.setText(strings[0]);
            }
        });
    }

共有1个答案

夔建章
2023-03-14

考虑稍微重构一下设计。DataModel不是简单地推入字符串,而是创建另一个表示可能与下游视图相关的模型状态的类型,如:

class State {
    public String lastModifiedBy;
    public String lastModifiedAt;
}

...然后让DataModel公开一个方法,该方法返回视图可以订阅的可观察的 ,例如:

dataModel.bind().subscribe(
    state -> {
        status.setText(state.lastModifiedBy)

        someOtherTextView.setText(state. lastModifiedAt)
    },
    error -> {
        Log.e(getClass().getName(), error)
    }
)

想出“正确”的抽象需要一些思考,但是在视图和模型之间引入中间类型可以让您独立地发展它们。

 类似资料:
  • 学习角得到服务和组件和可观察性。 我正在尝试在我的演示应用程序中实现暗模式。该控件由一个服务完成,该服务根据浏览器默认值(如果找到)设置暗主题。 它在应用程序组件中初始化,以便以后在应用程序中放置控制开关。 暗模式从布尔值开始工作,因此为true或false。据我所知,使用一个可观察对象是不够的,因为我希望多个订阅者都以两种方式绑定到订阅,每种方式在服务中切换这些可观察对象。到目前为止,我很肯定这

  • 问题内容: 我一直在阅读Observer模式,以保持UI处于最新状态,但仍然看不到它的用途。即使在我的特定对象中通知了我的MainActivity然后运行update();方法我仍然无法使用Pet对象来获取更新值,因为该对象是在Oncreate中创建的…而我只是无法创建新对象,因为那时变量会有所不同..这是我的实施,它似乎不起作用。 观察者/ MainActivity 可观察/宠物 问题答案: 首

  • 问题内容: 我将需要一个Observable,例如提供一个系统时钟,它不需要在onNext()中传递任何内容。我找不到允许我这样做的签名。 当然,我可以使用任何对象,然后传递null,但这没有多大意义。所以我的问题是,是否有更好的方法可以做到这一点。 问题答案: 如果您不发出任何声音,则无需致电。您可以使用签名来做类似的事情 您可以定义一个OnCompletedObserver来简化您的Obser

  • 是否有一种设计模式可以形成一个“复合”观察者/可观察者? 我的意思是我有一个可观察的,它在某个变化时通知它的监听器。 每个监听器也是一个可观察的,并通知它自己的监听器(在某个动作上,它做了哪个动作是由第一个可观察的通知触发的)。 这种观察者/可观察的“链接”作为设计是可以的,还是有一个标准的模式?

  • 我试图用制作一个简单的马里奥游戏。因此,我需要一个,用于杀死(Mario中的主要敌人)。经过一番研究之后,我研究了 我还创建了一个 我相信(不确定我是否完全理解了这一点)这使得成为,并且我需要多个,这意味着我将有多个的 所以我有两个问题:我对有什么不了解,以及如何让多个()在死亡时调用

  • 我正在尝试开发我的第一个RxJava例子 我有一个带有文本框和三个按钮的主要活动。第一个按钮初始化单独类中的整数。第二个按钮订阅一个可观察量,该可观察量假定正在观察整数。第三个按钮将整数的值减小 1。 这是我的密码 和班级 当我尝试使用 订阅时,它只是给了我 的值(即 6),然后它给了我完成! 然后我尝试使用,认为我需要使用,只是而不是,但后来我得到了一个返回的空的,然后再次完成! 有人能帮助我从