Приложение Kotlin / Android – изменение элементов представления извне.

Я использую kotlin lang для создания своего приложения для Android.

Я хотел создать объект (singleton), который будет специализироваться на модификации компонентов представления моей основной активности динамически (например, кнопки и т. Д.) И будет использоваться самой моей основной деятельностью.

Возникли некоторые проблемы. Прежде всего, объект (конечно) не является типом активности, поэтому я не могу использовать, например, findViewById и другие функции Activity и т. Д. Я попытался разрешить это, передав основную активность конструктором объекта, но это не разрешено – поскольку объекты не могут иметь их конструкторы.

Кроме того, я не уверен, если этот дизайн приложения приемлем в соответствии с хотя бы хорошими практиками. Если не реально – какой шаблон проектирования следует использовать для разделения логики изменения моих макетов из кода, который будет изменять только элементы вида?

Заранее благодарю вас за любые предложения.

Вы можете использовать Наблюдатели, наблюдаемые для этого. RxJava / RxAndroid / RxKotlin

или вы можете использовать Otto или greenbus для отправки / улавливания событий из одноэлементного класса.

Пример RxKotlin.

UserManager.kt

@Singleton class UserManager(private val rxBus : RxBus){ fun sendX(){ rxBus.send(EventX()) } 

по основной деятельности

MainActivity.kt

 class MainActivity : AppCompat .... onCreate(...){ rxBus.toObservable() .applySchedulers() .subscribe({ event -> if (event is EventX) { //do something here. } }) ) } 

rxBus.kt

 @Singleton class RxBus { private val _bus = PublishSubject.create<Any>() fun send(o: Any) { _bus.onNext(o) } fun toObservable(): Observable<Any> { return _bus } fun hasObservers(): Boolean { return _bus.hasObservers() } } 

Отто – хорошая и простая в использовании библиотека с квадрата, но Джейк Уортон сказал, что не используйте его на котлин, отправляйтесь с rxjava. я не помню, почему.

  • Генераторы Java / Kotlin
  • Как долго свойство String может находиться в Котлине?
  • Создание WAV-файла с помощью Okio
  • Kotlin Передача ListArray в другую активность с использованием Parcelable
  • Значок значка меню Kotlin
  • Не удается открыть проект студии Android после установки kotlin
  • Retrofit2 и kotlin
  • заполнять прядильщик с модифицированным и моши
  • Dokka - пропустить генератор javadoc для пакетов по умолчанию для Android
  • Поддержка Base64 для разных уровней API
  • RuntimeException, если minifyEnabled истинно с классом ViewModel
  • Interesting Posts

    Как сериализовать карту в строку JSON через JSON.stringify в kotlin JS?

    Android Studio 3.0 поддерживает Kotlin: активность как контекст

    Весенняя безопасность. Многоязычная страница входа на основе URL

    Когда я должен использовать let {} и когда просто просто! = Null

    Значения по умолчанию с помощью @ProjectedPayload / ProjectingJackson2HttpMessageConverter

    Как использовать библиотеку androidannotations в kotlin?

    Локальная трансляция не обновляет пользовательский интерфейс

    Генераторы Котлина, ожидающие неожиданного типа

    Как создать асинхронный вызов с помощью дооснащения и наблюдения в Котлине?

    убедитесь, что метод kotlin является статическим, верхним или аннотированным @JvmStatic

    Android Kotlin `.replaceRange` не заменяет текст в SpannableString

    Не удается разрешить символ kotlinOptions (в сборке Gradle)

    изменять внешний класс через анонимный внутренний объект в котлине

    Переопределение одной и той же подписи из разных закладок

    Добавление вторичного конструктора к родительскому объекту неожиданно влияет на дочерние классы

    Давайте будем гением компьютера.