Repository navigation
Commit cbcb2aa
committed
fix: support DataBinding expressions in ImageView android:src attribute
Problem:
- When using android:src="@{icon}" with DataBinding, the icon was not displayed
- The generated executeBindings() method only contained text binding, missing icon binding
Root Cause:
- ImageSourceAttributeHandler.supportsValue() rejected DataBinding expressions like "@{icon}"
because isSupportedDrawableReference("@{icon}") returned false
- This caused android:src to be marked as 'unsupported' instead of 'dataBinding'
- As a result, collectDataBindingExpressions() didn't collect the icon binding
Solution:
- Added isDataBindingExpression() helper to detect @{} and @={} expressions
- Modified ImageSourceAttributeHandler.supportsValue() to accept DataBinding expressions
- DataBinding expressions are validated at runtime via executeBindings(), not at compile time
Impact:
- android:src="@{icon}" now correctly generates viewIcon.setImageResource(icon ?: 0)
- Other drawable-based attributes can benefit from this pattern if needed1 parent 697d204 commit cbcb2aa
3 files changed
Lines changed: 96 additions & 0 deletions
File tree
- compiler-core/src
- main/kotlin/com/github/donglua/layoutx2c/registry
- test/kotlin/com/github/donglua/layoutx2c/codegen
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
1009 | 1009 | | |
1010 | 1010 | | |
1011 | 1011 | | |
| 1012 | + | |
| 1013 | + | |
| 1014 | + | |
| 1015 | + | |
1012 | 1016 | | |
1013 | 1017 | | |
1014 | 1018 | | |
| |||
1924 | 1928 | | |
1925 | 1929 | | |
1926 | 1930 | | |
| 1931 | + | |
| 1932 | + | |
| 1933 | + | |
| 1934 | + | |
| 1935 | + | |
1927 | 1936 | | |
1928 | 1937 | | |
1929 | 1938 | | |
| |||
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
| 1 | + | |
| 2 | + | |
| 3 | + | |
| 4 | + | |
| 5 | + | |
| 6 | + | |
| 7 | + | |
| 8 | + | |
| 9 | + | |
| 10 | + | |
| 11 | + | |
| 12 | + | |
| 13 | + | |
| 14 | + | |
| 15 | + | |
| 16 | + | |
| 17 | + | |
| 18 | + | |
| 19 | + | |
| 20 | + | |
| 21 | + | |
| 22 | + | |
| 23 | + | |
| 24 | + | |
| 25 | + | |
| 26 | + | |
| 27 | + | |
| 28 | + | |
| 29 | + | |
| 30 | + | |
| 31 | + | |
| 32 | + | |
| 33 | + | |
| 34 | + | |
| 35 | + | |
| 36 | + | |
| 37 | + | |
| 38 | + | |
| 39 | + | |
| 40 | + | |
| 41 | + | |
| 42 | + | |
| 43 | + | |
| 44 | + | |
| 45 | + | |
| 46 | + | |
| 47 | + | |
| 48 | + | |
| 49 | + | |
| 50 | + | |
| 51 | + | |
| 52 | + | |
| 53 | + | |
| 54 | + | |
| 55 | + | |
| 56 | + | |
| 57 | + | |
| 58 | + | |
| 59 | + | |
| 60 | + | |
| 61 | + | |
| 62 | + | |
| 63 | + | |
| 64 | + | |
| 65 | + | |
| 66 | + | |
| 67 | + | |
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
| 1 | + | |
| 2 | + | |
| 3 | + | |
| 4 | + | |
| 5 | + | |
| 6 | + | |
| 7 | + | |
| 8 | + | |
| 9 | + | |
| 10 | + | |
| 11 | + | |
| 12 | + | |
| 13 | + | |
| 14 | + | |
| 15 | + | |
| 16 | + | |
| 17 | + | |
| 18 | + | |
| 19 | + | |
| 20 | + | |
0 commit comments