summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorGeorge Mount <mount@google.com>2016-05-11 12:43:10 -0700
committerGeorge Mount <mount@google.com>2016-05-11 14:01:48 -0700
commitec9ad673825dec1e43fd7596a97f03c0709140ea (patch)
tree6403bca619462c10572c71a700a053058304aecf
parenta30632ed322094531b22547b1a73b4a3b191e89c (diff)
downloaddata-binding-ec9ad673825dec1e43fd7596a97f03c0709140ea.tar.gz
Fix using custom Views in data binding layouts near includes.
Bug 27814095 If a custom View does data binding during inflation or gives a View a non-String tag, was triggering an exception while binding the containing layout. Change-Id: I07805767cd14eed5df0951fdd1f89278ee46e695
-rw-r--r--extensions/library/src/main/java/android/databinding/ViewDataBinding.java10
1 files changed, 6 insertions, 4 deletions
diff --git a/extensions/library/src/main/java/android/databinding/ViewDataBinding.java b/extensions/library/src/main/java/android/databinding/ViewDataBinding.java
index f50267b8..70c79c41 100644
--- a/extensions/library/src/main/java/android/databinding/ViewDataBinding.java
+++ b/extensions/library/src/main/java/android/databinding/ViewDataBinding.java
@@ -989,7 +989,8 @@ public abstract class ViewDataBinding extends BaseObservable {
if (existingBinding != null) {
return;
}
- final String tag = (String) view.getTag();
+ Object objTag = view.getTag();
+ final String tag = (objTag instanceof String) ? (String) objTag : null;
boolean isBound = false;
if (isRoot && tag != null && tag.startsWith("layout")) {
final int underscoreIndex = tag.lastIndexOf('_');
@@ -1032,9 +1033,9 @@ public abstract class ViewDataBinding extends BaseObservable {
for (int i = 0; i < count; i++) {
final View child = viewGroup.getChildAt(i);
boolean isInclude = false;
- if (indexInIncludes >= 0) {
+ if (indexInIncludes >= 0 && child.getTag() instanceof String) {
String childTag = (String) child.getTag();
- if (childTag != null && childTag.endsWith("_0") &&
+ if (childTag.endsWith("_0") &&
childTag.startsWith("layout") && childTag.indexOf('/') > 0) {
// This *could* be an include. Test against the expected includes.
int includeIndex = findIncludeIndex(childTag, minInclude,
@@ -1094,7 +1095,8 @@ public abstract class ViewDataBinding extends BaseObservable {
int max = firstIncludedIndex;
for (int i = firstIncludedIndex + 1; i < count; i++) {
final View view = viewGroup.getChildAt(i);
- final String tag = (String) view.getTag();
+ final Object objTag = view.getTag();
+ final String tag = objTag instanceof String ? (String) view.getTag() : null;
if (tag != null && tag.startsWith(tagBase)) {
if (tag.length() == firstViewTag.length() && tag.charAt(tag.length() - 1) == '0') {
return max; // Found another instance of the include