iex
04/16/2020, 5:42 PMonCleared
to call the delegate's clearDisposables
.Cody Engel
04/16/2020, 5:53 PMiex
04/16/2020, 5:53 PMonCleared
) though that's hackyCody Engel
04/16/2020, 5:56 PMDisposableHandler
, and then that would maintain creating the CompositeDisposable
and ensuring the correct function is invoked.
I used this at a previous company to share code with the Activity, Fragment, and ViewModel. Albeit there is a bit of ceremony going on and you'd still likely end up with a DisposableActivity
, DisposableFragment
, and DisposableViewModel
, but that's one way delegation could play into it.onCleared
function also works though, especially if you just want to share it between ViewModels. Happy to hear the articles helped you out, seeing that made my day šiex
04/16/2020, 6:03 PMonCleared
function via interface composition or delegates though. The compiler wouldn't detect if the view model's onCleared
was renamed, for exampleonClear
tooCody Engel
04/16/2020, 6:10 PMiex
04/16/2020, 6:16 PMonClear()
(or equivalent) to call the interface's method, so it's pretty much the same amount of code than without the interface.Cody Engel
04/16/2020, 6:33 PMinterface DisposableHandler {
fun addDisposable(disposable: Disposable)
fun addDisposables(disposables: List<Disposable>)
fun clearDisposables()
}
Then the implementation (what would be delegated to the Activity, Fragment, ViewModel) would use a CompositeDisposable
as the property to proxy those. There are some more advanced techniques you could use, such as having Application.ActivityLifecycleCallbacks
registered to invoke clearDisposables
when onDestroyed
is called. There is a similar callback for Fragments too, but I'm unsure if ViewModels have anything similar... That'd be one way to avoid having a base class though.iex
04/16/2020, 6:37 PMclearDisposables
on the interface, which would result in the same amount of code than just managing them itself (assuming usage of CompositeDisposable
)
ActivityLifecycleCallbacks
would probably improve this though.Cody Engel
04/16/2020, 6:40 PM