summaryrefslogtreecommitdiff
path: root/extensions
diff options
context:
space:
mode:
authorGeorge Mount <mount@google.com>2017-08-23 13:34:49 -0700
committerGeorge Mount <mount@google.com>2017-08-24 14:24:22 -0700
commitfb08f8c56dc1f3befb64e2dee43d7e550118ea73 (patch)
tree076f4ff680c704fe8c626ebcf094f83c302cc6b0 /extensions
parenteaab6089f7c5f6eda2b19449501183c0537fbee0 (diff)
downloaddata-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.java26
-rw-r--r--extensions/library/build.gradle2
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() {