Я хотел бы увидеть ваш журнал ошибок. Читая код, я бы сказал, что ваша проблема в том, что вы пытаетесь обновить элементы интерфейса из потока, который не является потоком интерфейса.
Чтобы быстро протестировать и решить вашу проблему, просто поместите button.setText в блок runUIThread. Для связи с UI-потоком из другого потока вы можете использовать Handler.
DOCS: https://developer.android.com/training/multiple-threads/communicate-ui https://developer.android.com/reference/android/app/Activity #runOnUiThread (java.lang.Runnable)
Я не вижу проблем с вашим подходом. Вам не обязательно иметь отношения «один ко многим» между докладчиком и представлениями - обычно у вас есть только одно представление для каждого докладчика. Идея MVP состоит в том, чтобы отделить презентаторов от представлений, чтобы при необходимости вы могли легко переключать представление (например, поддерживая как веб-приложение, так и настольное приложение), но это не означает, что вы необходимо сделать его динамическим.
Одно предложение: я обычно предоставляю IView
в качестве параметра конструктора для Presenter
. Конкретная реализация IView
затем создает презентатор (либо с помощью жестко запрограммированного нового презентатора (this)
, либо с помощью контейнера IoC для его получения.
Вы можете найти ответы to Реализация MVC с Windows Forms полезна, поскольку они говорят о различных вариантах реализации MVC и MVP