Ответ
В MVP для уведомления View о событиях из Presenter следует использовать интерфейс обратного вызова (View interface). Presenter держит слабую ссылку на View и вызывает его методы при необходимости.
// View interface
interface MainView {
fun showData(data: List<String>)
fun showError(message: String)
}
// Presenter
class MainPresenter(private val view: MainView) {
fun loadData() {
try {
val data = repository.getData()
view.showData(data)
} catch (e: Exception) {
view.showError(e.message ?: "Unknown error")
}
}
}
// Activity/Fragment implements View
class MainActivity : AppCompatActivity(), MainView {
override fun showData(data: List<String>) {
adapter.submitList(data)
}
override fun showError(message: String) {
Toast.makeText(this, message, Toast.LENGTH_SHORT).show()
}
}
Ключевые моменты:
- View знает только о Presenter, но не о Model
- Presenter не содержит Android-зависимостей
- Все UI-действия выполняются через методы View интерфейса