UnsubscribeDelegate{ fun <T>Observable.addSubscription():Observable<T> fun unsubscribe() } class UnsubscribeDelegateImpl : UnsubscribeDelegate{ val compositeSubscription = AndroidCompositeSubscription() override fun <T>Observable.addSubscription():Observable<T> = lift(OperatorAddToCompositeSubscription<T>(compositeSubscri ption)) override fun unsubscribe() = compositeSubscription.unsubscribe() }
class SomePresenter( val rootView:View, val model:SomeModel){ val button = rootView.findById(R.id.button) init{ // onPause()Ͱunsubscribe()͢Δඞཁ͕͋Δ button.setOnClick = model .loadData() .subscribe{ update(it) } } } class SomeActivity : Activity(){ override fun onCreate(bundle:Bundle){ setContentView(R.layout.activity) val rootView = findViewById(android.R.id.content) val presenter = SomePresenter(rootView, model) } }
UnsubscribeDelegate{ fun <T>Observable.addSubscription():Observable<T> fun unsubscribe() fun addChildDelegate(child:UnsubscribeDelegate) } class UnsubscribeDelegateImpl : UnsubscribeDelegate{ val compositeSubscription = AndroidCompositeSubscription() val children = ArrayList<UnsubscribeDelegate> override fun <T>Observable.addSubscription():Observable<T> = lift(OperatorAddToCompositeSubscription<T>(compositeSubscription)) override fun unsubscribe() { compositeSubscription.unsubscribe() children.forEach{ it. unsubscribe() } } override fun addChildDelegate(child:UnsubscribeDelegate) = children.add(child) }