diff options
Diffstat (limited to 'extensions/baseAdapters/src/main/java/android/databinding/adapters/RatingBarBindingAdapter.java')
-rw-r--r-- | extensions/baseAdapters/src/main/java/android/databinding/adapters/RatingBarBindingAdapter.java | 36 |
1 files changed, 32 insertions, 4 deletions
diff --git a/extensions/baseAdapters/src/main/java/android/databinding/adapters/RatingBarBindingAdapter.java b/extensions/baseAdapters/src/main/java/android/databinding/adapters/RatingBarBindingAdapter.java index 5e49c72d..4896df08 100644 --- a/extensions/baseAdapters/src/main/java/android/databinding/adapters/RatingBarBindingAdapter.java +++ b/extensions/baseAdapters/src/main/java/android/databinding/adapters/RatingBarBindingAdapter.java @@ -15,12 +15,40 @@ */ package android.databinding.adapters; -import android.databinding.BindingMethod; -import android.databinding.BindingMethods; +import android.databinding.BindingAdapter; +import android.databinding.InverseBindingListener; +import android.databinding.InverseBindingMethod; +import android.databinding.InverseBindingMethods; import android.widget.RatingBar; +import android.widget.RatingBar.OnRatingBarChangeListener; -@BindingMethods({ - @BindingMethod(type = RatingBar.class, attribute = "android:onRatingChanged", method = "setOnRatingBarChangeListener"), +@InverseBindingMethods({ + @InverseBindingMethod(type = RatingBar.class, attribute = "android:rating"), }) public class RatingBarBindingAdapter { + @BindingAdapter("android:rating") + public static void setRating(RatingBar view, float rating) { + if (view.getRating() != rating) { + view.setRating(rating); + } + } + + @BindingAdapter(value = {"android:onRatingChanged", "android:ratingAttrChanged"}, + requireAll = false) + public static void setListeners(RatingBar view, final OnRatingBarChangeListener listener, + final InverseBindingListener ratingChange) { + if (ratingChange == null) { + view.setOnRatingBarChangeListener(listener); + } else { + view.setOnRatingBarChangeListener(new OnRatingBarChangeListener() { + @Override + public void onRatingChanged(RatingBar ratingBar, float rating, boolean fromUser) { + if (listener != null) { + listener.onRatingChanged(ratingBar, rating, fromUser); + } + ratingChange.onChange(); + } + }); + } + } } |