views ▸ new values are passed to the UI automatically ▸ has its origin in WPF ▸ implemented on Android with annotation processing WHAT’S DATABINDING? THORBEN BUCHTA
"Hello World" @Bindable get private set(value) { field = value notifyPropertyChanged(BR.text) } } YOU DECIDE! MVVM ARCHITECTURE ON ANDROID THORBEN BUCHTA
: AppCompatActivity(), LoaderCallbacks<VM> { protected final lateinit var binding: B protected abstract val layoutId: Int protected final var viewModel: VM? public abstract val viewModelProvider: Provider<VM> protected open fun onViewModelLoaded(viewModel: VM) protected open fun onViewModelPropertyChanged(viewModel: VM, fieldId: Int) } public typealias MvvmActivity<VM> = MvvmBindingActivity<VM, ViewDataBinding> MVVM ARCHITECTURE ON ANDROID THORBEN BUCHTA
ViewDataBinding> : Fragment(), LoaderCallbacks<VM> { protected final lateinit var binding: B protected abstract val layoutId: Int protected final var viewModel: VM? public abstract val viewModelProvider: Provider<VM> protected open fun onViewModelLoaded(viewModel: VM) protected open fun onViewModelPropertyChanged(viewModel: VM, fieldId: Int) } public typealias MvvmFragment<VM> = MvvmBindingFragment<VM, ViewDataBinding> MVVM ARCHITECTURE ON ANDROID THORBEN BUCHTA
text: String = "Hello World" @Bindable get private set(value) { field = value notifyPropertyChanged(BR.text) } } interface ViewModel : Observable { fun onBind() fun onUnbind() fun onDestroy() } MVVM ARCHITECTURE ON ANDROID THORBEN BUCHTA
text: String = "Hello World" @Bindable get private set(value) { field = value notifyPropertyChanged(BR.text) } } abstract class BaseViewModel : BaseObservable(), ViewModel { open fun onBind() open fun onUnbind() open fun onDestroy() } MVVM ARCHITECTURE ON ANDROID THORBEN BUCHTA
BaseViewModel() { var text: String = stringProvider.getRandomString() @Bindable get private set(value) { field = value notifyPropertyChanged(BR.text) } } MVVM ARCHITECTURE ON ANDROID THORBEN BUCHTA