Kotlin / Android应用程序 – 从外部活动更改视图元素
我正在使用kotlin lang来创建我的Android应用程序。
我想创建一个对象(单身人士),专门用于动态地(如按钮等)模仿我的主要活动的视图组件,并将被我的主要活动本身使用。
出现了一些问题。 首先,对象是(当然)不是活动类型,所以我不能使用例如findViewById和其他活动的功能等我试图通过传递主要活动的对象的构造函数来解决这个问题,但它是不允许的 – 因为对象不能他们的构造函数。
此外,我不知道,如果这个应用程序设计是可以接受的,至少有良好的做法。 如果不是真的 – 我应该使用什么样的设计模式来分离如何改变布局的逻辑和只修改视图元素的代码?
提前感谢您的任何建议。
你可以使用Observers,observables来做到这一点。 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() } }
Otto是一个很好用的方形图书馆,但是warkon说不要把它用在kotlin上,而是用rxjava。 我不记得为什么。