0%

Data Binding 작업 후, 'Found data binding errors. msg:Identifiers must have user defined types from the XML file.' 발생시

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>

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