- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我的演示者如下所示:
// I'm retaining the presenter in a singleton instances map and reuse them
// because they are loading data from the internet and this should be done once
// per app start only
public static ArticlePresenter get(Article article)
{
if (INSTANCES.containsKey(article.id()))
return INSTANCES.get(article.id());
ArticlePresenter instance = new ArticlePresenter();
INSTANCES.put(article.id(), instance);
return instance;
}
@Override
protected void bindIntents()
{
ArrayList<Observable<ArticlePartialStateChanges>> observables = new ArrayList<>();
observables.add(intent(ArticleView::loadArticleIntent)
.doOnNext(article -> L.d("intent: loadArticleIntent"))
.flatMap(article -> AndroInteractor.loadArticle(article)
.map(data -> (ArticlePartialStateChanges) new ArticlePartialStateChanges.Loaded(data))
.startWith(new ArticlePartialStateChanges.LoadingArticle(article))
.onErrorReturn(ArticlePartialStateChanges.LoadingArticleError::new)
.subscribeOn(Schedulers.io())
)
);
Observable<ArticlePartialStateChanges> allIntents = Observable.merge(observables);
ArticleViewState initialState = ArticleViewState.builder().build();
Observable<ArticleViewState> stateObservable = allIntents
.scan(initialState, this::viewStateReducer)
.observeOn(AndroidSchedulers.mainThread());
subscribeViewState(stateObservable, ArticleView::render);
}
我的 fragment 的 loadArticleIntent
如下所示:
@Override
public Observable<Article> loadArticleIntent()
{
return Observable.just(article).doOnComplete(() -> L.d("Article loaded"));
}
结果
如果 fragment 是第一次创建,我会得到以下 3 项:
如果再次创建 fragment ,它将从 map 中检索已经存在的展示者,并将重用其中的最后一个已知状态。然后我得到以下信息:
这并不完美,我需要更改逻辑以仅发出最后已知的状态(与屏幕旋转后发生的行为相同)。
我该如何解决这个问题?
最佳答案
不要重复使用 Presenter。这不是它想要的方式。重用它们在今天可能会奏效,但不能保证它在未来也能奏效。
所以基本上您只想使用从业务逻辑中检索到的数据,对吗?基本上,您希望这部分预加载数据 AndroInteractor.loadArticle(article)
。所以只需在应用程序启动时调用它,而不是整个演示者。也许您使用了一些内存/磁盘缓存库,或者只是在 AndroInteractor.loadArticle(article)
内部使用了一个 BehaviorSubject
。那一个保存最新数据(如果有的话)。
所以你的问题只是一个“业务逻辑问题”/“数据缓存问题”而不是一个真正的“Presenter”问题。因此,您应该在业务逻辑层解决这个问题,即 AndroInteractor.loadArticle(article)
而不是保留整个 Presenter。
关于android - Mosby MVI - 如何重用 Presenter,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44691487/
我将 Mosby MVI 库用于一个演示应用程序,该应用程序在我的交互器中使用 Retrofit2 对 Restful API 执行简单的 CRUD 操作。我构建的 ViewStates 与示例应用程
我的演示者如下所示: // I'm retaining the presenter in a singleton instances map and reuse them // because the
我正在使用 Mosby 创建一个小应用程序。 该应用程序有一个我想要绑定(bind)的服务。我想正确的位置是在演示者中。但我实在不知道该怎么做。 我想要存档的是,当服务绑定(bind)时,我想调用它的
在带有 Mosby 库的 MVI 中,访问流中 reducer 函数之外的状态的最佳方法是什么?例如,当您需要为回收站加载下一页时,您需要知道最后加载的是哪一页。 (在示例应用程序中,最后一页保存在加
与 MVC 和 MVVM 等“旧”架构相比,“较新”的 Model-View-Intent 架构之间有什么区别吗? MVI 解决什么问题?与 MVC/MVVM 有什么相似之处?有什么区别? 在 M
我正在使用新的 Mosby MVI新演示应用程序的库。在演示者中定义 Intent 时,在附加 View 时触发/发出 Intent 是不一致的。 例如:让我们在 Activity 中定义非常简单的
我正在尝试在 Android 中实现 MVI 架构,但不想使用 Mosby 库。我想先学习基础知识。 我正在构建一个示例应用程序,当我按下按钮时, TextView 中的文本会发生变化(最初文本是其他
我正在尝试找出一种方法来消除可变状态,从而消除可能的竞争条件。但我似乎无法弄清楚如何以某种方式“交织”两个 Observable,同时还使用“扫描”。 希望通过展示更多代码,我可以给你想法: priv
尽管在下游处理了错误(?),但我还是抛出了 OnErrorNotImplementedException 并且应用程序崩溃了。 异常 E/AndroidRuntime: FATAL EXCEPTION
关闭。这个问题需要更多focused .它目前不接受答案。 想改进这个问题吗? 更新问题,使其只关注一个问题 editing this post . 关闭 6 年前。 Improve this qu
我是一名优秀的程序员,十分优秀!