Android MVP 我应该在哪里安装 TextWatcher

Android MVP Where should i have a TextWatcher

我目前在我的视图文件 (activity.java) 上实现了 TextWatchers。但是他们应该在演示者中,因为演示者是决定在用户​​输入后做什么的人,还是将它们保留在原处是明智的?

您的问题有两个方面:

  • 一方面,TextWatcher 绝对是 Android UI 的一部分,因为 Presenter不应该对 Android 特定代码一无所知 Watcher 应该是视图的一部分
  • 另一方面,TextWatcher 需要处理传入事件并对其应用业务逻辑,并且由于 View 应该是尽可能愚蠢 Watcher 应该是 Presenter
  • 的一部分

要解决此问题,我的建议是将 Watcher 保留在 View 中,但仅将其传入事件重定向到主持人:

class TextWatcher(presenter: MVPWatcherInterface) : ParentTextWatcher {

  private val presenterInterface: WeakReference<MVPWatcherInterface> = WeakReference(presenter)

  override fun onSomeTextEvent(){
    presenterInterface.get()?.onWatcherEventSomeTextEvent()
  }
}

要实现这个,你必须定义 MVPWatcherInterface 并在你的 Presenter 中实现它,并将它传递给 当您在 View 中创建 TextWatcher 时。这允许您在 Presenter.

内处理 onWatcherEventSomeTextEvent 内的所有业务逻辑

这样代码就干净了,并且根据 MVP 规则分开了:)

(附带说明:我建议的观察者使用 WeakReference 来保持 MVPWatcherInterface -> I强烈建议以这种方式实现它,这样您的代码就不会通过防止 Presenter 被垃圾收集而产生任何泄漏)