美文网首页
ObservableViewModel

ObservableViewModel

作者: 黎院根 | 来源:发表于2018-09-27 11:18 被阅读0次

    kotlin

    import android.arch.lifecycle.ViewModel
    import android.databinding.Bindable
    import android.databinding.Observable
    import android.databinding.PropertyChangeRegistry
    
    /**
     * An [Observable] [ViewModel] for Data Binding.
     */
    open class ObservableViewModel : ViewModel(), Observable {
    
        private val callbacks: PropertyChangeRegistry by lazy { PropertyChangeRegistry() }
    
        override fun addOnPropertyChangedCallback(callback: Observable.OnPropertyChangedCallback) {
            callbacks.add(callback)
        }
    
        override fun removeOnPropertyChangedCallback(callback: Observable.OnPropertyChangedCallback)     {
            callbacks.remove(callback)
        }
    
        /**
         * Notifies listeners that all properties of this instance have changed.
         */
        @Suppress("unused")
        fun notifyChange() {
            callbacks.notifyCallbacks(this, 0, null)
        }
    
        /**
         * Notifies listeners that a specific property has changed. The getter for the property
         * that changes should be marked with [Bindable] to generate a field in
         * `BR` to be used as `fieldId`.
         *
         * @param fieldId The generated BR id for the Bindable field.
         */
        fun notifyPropertyChanged(fieldId: Int) {
            callbacks.notifyCallbacks(this, fieldId, null)
        }
    }
    

    java

    import android.arch.lifecycle.ViewModel;
    import android.databinding.Observable;
    import android.databinding.PropertyChangeRegistry;
    
    /**
     * A ViewModel that is also an Observable,
     * to be used with the Data Binding Library.
     */
    public class ObservableViewModel extends ViewModel implements Observable {
        private PropertyChangeRegistry callbacks = new PropertyChangeRegistry();
    
        @Override
        public void addOnPropertyChangedCallback(Observable.OnPropertyChangedCallback callback) {
            callbacks.add(callback);
        }
    
        @Override
        public void removeOnPropertyChangedCallback(Observable.OnPropertyChangedCallback callback) {
           callbacks.remove(callback);
        }
    
        /**
         * Notifies observers that all properties of this instance have changed.
         */
        public void notifyChange() {
            callbacks.notifyCallbacks(this, 0, null);
        }
    
        /**
         * Notifies observers that a specific property has changed. The getter for the
         * property that changes should be marked with the @Bindable annotation to
         * generate a field in the BR class to be used as the fieldId parameter.
         *
         * @param fieldId The generated BR id for the Bindable field.
         */
        public void notifyPropertyChanged(int fieldId) {
            callbacks.notifyCallbacks(this, fieldId, null);
        }
    }

    相关文章

      网友评论

          本文标题:ObservableViewModel

          本文链接:https://www.haomeiwen.com/subject/kcfeoftx.html