diff options
author | George Mount <mount@google.com> | 2017-08-23 13:34:49 -0700 |
---|---|---|
committer | George Mount <mount@google.com> | 2017-08-24 14:24:22 -0700 |
commit | fb08f8c56dc1f3befb64e2dee43d7e550118ea73 (patch) | |
tree | 076f4ff680c704fe8c626ebcf094f83c302cc6b0 /extensions | |
parent | eaab6089f7c5f6eda2b19449501183c0537fbee0 (diff) | |
download | data-binding-fb08f8c56dc1f3befb64e2dee43d7e550118ea73.tar.gz |
Fix android:selectedItemPosition.
Bug 64981992
This CL makes a multi-attribute BindingAdapter for selectedItemPosition
and adapter. This allows the selected position to work after the adapter
has been set.
This CL also adds the ability to use android:selection as well as
android:selectedItemPosition. Many developers are confused because
the accessor methods don't match. They are getSelectedItemPosition()
and setSelection().
Updates the prebuilts to 1.3.3 for the next release.
Test: coming in following CL after 1.3.3 is committed
Change-Id: I7e7d0d6951241c7c14f8a846125f4044d3cbe5f4
Diffstat (limited to 'extensions')
-rw-r--r-- | extensions/baseAdapters/src/main/java/android/databinding/adapters/AdapterViewBindingAdapter.java | 26 | ||||
-rw-r--r-- | extensions/library/build.gradle | 2 |
2 files changed, 26 insertions, 2 deletions
diff --git a/extensions/baseAdapters/src/main/java/android/databinding/adapters/AdapterViewBindingAdapter.java b/extensions/baseAdapters/src/main/java/android/databinding/adapters/AdapterViewBindingAdapter.java index e4621612..71163c39 100644 --- a/extensions/baseAdapters/src/main/java/android/databinding/adapters/AdapterViewBindingAdapter.java +++ b/extensions/baseAdapters/src/main/java/android/databinding/adapters/AdapterViewBindingAdapter.java @@ -23,6 +23,7 @@ import android.databinding.InverseBindingMethod; import android.databinding.InverseBindingMethods; import android.view.View; import android.widget.AbsListView; +import android.widget.Adapter; import android.widget.AdapterView; import android.widget.AdapterView.OnItemSelectedListener; @@ -32,6 +33,9 @@ import android.widget.AdapterView.OnItemSelectedListener; }) @InverseBindingMethods({ @InverseBindingMethod(type = AdapterView.class, attribute = "android:selectedItemPosition"), + @InverseBindingMethod(type = AdapterView.class, attribute = "android:selection", + method = "getSelectedItemPosition", + event = "android:selectedItemPositionAttrChanged"), }) public class AdapterViewBindingAdapter { @@ -42,8 +46,28 @@ public class AdapterViewBindingAdapter { } } + @BindingAdapter("android:selection") + public static void setSelection(AdapterView view, int position) { + setSelectedItemPosition(view, position); + } + + @BindingAdapter({"android:selectedItemPosition", "android:adapter"}) + public static void setSelectedItemPosition(AdapterView view, int position, Adapter adapter) { + if (adapter != view.getAdapter()) { + view.setAdapter(adapter); + view.setSelection(position); + } else if (view.getSelectedItemPosition() != position) { + view.setSelection(position); + } + } + + @BindingAdapter({"android:selection", "android:adapter"}) + public static void setSelection(AdapterView view, int position, Adapter adapter) { + setSelectedItemPosition(view, position, adapter); + } + @BindingAdapter(value = {"android:onItemSelected", "android:onNothingSelected", - "android:selectedItemPositionAttrChanged"}, requireAll = false) + "android:selectedItemPositionAttrChanged" }, requireAll = false) public static void setOnItemSelectedListener(AdapterView view, final OnItemSelected selected, final OnNothingSelected nothingSelected, final InverseBindingListener attrChanged) { if (selected == null && nothingSelected == null && attrChanged == null) { diff --git a/extensions/library/build.gradle b/extensions/library/build.gradle index b8c713d1..530b9845 100644 --- a/extensions/library/build.gradle +++ b/extensions/library/build.gradle @@ -142,7 +142,7 @@ class ExcludeShimTransform extends Transform { } public Set<Scope> getReferencedScopes() { - return TransformManager.SCOPE_FULL_LIBRARY; + return TransformManager.SCOPE_FULL_LIBRARY_WITH_LOCAL_JARS; } public boolean isIncremental() { |