Android MVP我应该在哪里拥有TextWatcher

时间:2018-08-31 14:25:52

标签: java android android-mvp

我目前在自己的视图文件(activity.java)中实现了TextWatchers。但是,他们应该在主持人中吗,因为主持人是在用户输入后决定要做什么的人,还是将他们放在原处是明智的选择?

1 个答案:

答案 0 :(得分:0)

您的问题有两个方面:

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

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

class TextWatcher(presenter: MVPWatcherInterface) : ParentTextWatcher {

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

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

要实现此目的,您必须定义 MVPWatcherInterface ,并在 Presenter 中实现它,并在创建时将其传递给 TextWatcher 视图。这样,您就可以处理 Presenter 内部的 onWatcherEventSomeTextEvent 内部的所有业务逻辑。

这样,代码就可以按照MVP规则进行清理和分离:)

(作为旁注:我建议的观察者使用 WeakReference 来保持 MVPWatcherInterface ->我强烈建议以这种方式实现它,因此防止 Presenter 被垃圾回收)不会使您的代码产生任何泄漏)