0%

Data binding error 발생

XML Layout 파일에서 Data binding을 사용하는 분들이 많습니다. 저를 비롯해서..
저는 사진 촬영 버튼을 누르면 저장 할 것인지 다시 촬영할 것인지, 미리보기 화면을 제공하는 기능을 구현하고 있었습니다.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
<?xml version="1.0" encoding="utf-8"?>
<layout>
<data>
<import type="android.view.View" />
<variable
name="activity"
type="project.wgtech.sample.view.CameraActivity" />
<variable
name="previewMode"
type="java.lang.Boolean" />
</data>

<!-- 생략 -->

<androidx.appcompat.widget.AppCompatImageButton
.. 생략 ..
android:onClick="@{activity::clickCapture}"
android:visibility="@{previewMode ? View.VISIBLE : View.GONE}" />

<!-- 생략 -->
</layout>

위와 같이 Data binding 을 수행하고 build를 시도해보니….

****/ data binding error****
msg:Identifiers must have user defined types from the XML file.
View is missing it file: …
****\ data binding error

라는 오류가 발생되면서 build에 실패합니다….


왜 발생할까요?

View is missing it 이라고 합니다.
XML 파일에서 해당 View를 정의하지 않아 생긴 오류라고는 하는데,

1
2
3
4
5
6
7
<!-- 생략 -->
<androidx.appcompat.widget.AppCompatImageButton
.. 생략 ..
android:onClick="@{activity::clickCapture}"
android:visibility="@{previewMode ? View.VISIBLE : View.GONE}" />

<!-- 생략 -->

android:visibility 에서 View 클래스를 사용하고 있더라구요.
도대체 어디서 저 View 를 정의하면 되는 것인가~ 했더니! import하면 되는 것이었습니다.


해결 방법

따라서 태그에서 View 클래스를 import 하면 됩니다.

1
2
3
4
<data>
<import type="android.view.View" />

</data>

위와 같은 형식으로 <data> 태그안에 <import> 태그를 정의하고,

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
<?xml version="1.0" encoding="utf-8"?>
<layout>
<data>
<import type="android.view.View" />
<variable
name="activity"
type="project.wgtech.sample.view.CameraActivity" />
<variable
name="previewMode"
type="java.lang.Boolean" />
</data>

<!-- 생략 -->

<androidx.appcompat.widget.AppCompatImageButton
.. 생략 ..
android:onClick="@{activity::clickCapture}"
android:visibility="@{previewMode ? View.VISIBLE : View.GONE}" />

<!-- 생략 -->
</layout>

로써, 미리보기 화면을 한 화면에서 조정할 수 있게 되었습니다!