Kotlin / Android应用程序 - 从外部活动更改视图元素

时间:2017-09-20 12:03:10

标签: android design-patterns kotlin

我正在使用kotlin lang创建我的Android应用程序。

我想创建一个对象(单例),专门用于动态调整我的主要活动视图组件(如按钮等),并将由我的主要活动本身使用。

出现了一些问题。首先,对象(当然)不是Activity类型,所以我不能使用例如findViewById和其他Activity的函数等。我试图通过对象的构造函数传递main Activity来解决这个问题,但是它是不被允许的 - 因为对象不能拥有它们的构造函数。

此外,我不确定,根据至少良好做法,此应用程序设计是否可以接受。如果不是真的 - 我应该使用什么设计模式来分离如何从仅修改视图元素的代码中更改布局的逻辑?

提前感谢您提出任何建议。

1 个答案:

答案 0 :(得分:0)

你可以使用Observvers,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是一个优秀且易于使用的广场图书馆,但是jake warthon表示不要在kotlin上使用它与rxjava一起使用。我不记得为什么。