Custom View 호출 에러(Unable to start activity ComponentInfo~)
Custom View 호출 에러
( java.lang.RuntimeException: Unable
to start activity ComponentInfo{클래스}:
android.view.InflateException:
Binary XML file line #12: Binary XML file
line #12: Error inflating class 클래스)
ㆍ Custom View를 만들때 많이 접하는 에러이다.
ㆍ 의외로 간단한 문제인데, 모를때에는 삽질좀 하는 부분이다.
뭐 이런식의 에러이다
어떻게 하다가 위와 같은 에러가 발생하는가?
보통
한 화면에서 일부분의 영역만
Canvas로 사용한다던가
Viewpager라던가 Scrollview
등등을 사용할때
내부적으로 뜯어야 하는 하는 경우도
있고, 동적으로 변화를 줄때도
사용해야 하는 경우도 있고
다양하다.
사용할때 보통
CustomView로 사용할
Class를 하나 만듭니다
그럼 빨간색이 뜨는데
빨간줄에서 Alt+Enter를 누르면
생성자를 자동으로 만들어줍니다
그다음
xml파일로 넘어와서
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context="com.tistory.itpangpang.canvasex3.MainActivity">
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Hello World!" />
<com.tistory.itpangpang.canvasex3.CustomView
android:id="@+id/cv"
android:layout_width="match_parent"
android:layout_height="200dp"
android:layout_centerInParent="true"/>
</RelativeLayout>
위와 같이 원하는 영역에
CustomView를 배치시킵니다
그리고 돌려보면?
요렇게
제목과 같은 에러메시지를
보면서 종료되는 것을 볼 수 있습니다
해결 방법은?
먼저 바로 해결해보자면
Class를 생성하고 생성자를
추가하는 과정에서
첫번째 생성자가아닌
두번째와 같이 AttributeSet의 값도
같이 받아야 합니다
위와 같이 수정하고
돌려보면?
실행이 잘 되는 것을
볼 수 있습니다.
(물론 CustomView에 지금 아무것도
안해서 빈공간으로 보이지만요)
AttributeSet을 왜 써줘야 하나요?
음.
Android Reference에서
AttributeSet을 보면
첫줄에 아래와 같은 말이 나옵니다
A collection of attributes, as found associated
with a tag in an XML document.
AttributeSet은 XML과 연관이 있다
뭐 이런 말인것 같네요
우리가 XML에서 CustomView를
생성해줬는데 거기서 만들어준
설정값을 가져오기 위해서는
AttributeSet까지 전부 보내줘야
우리가 사용할 수 있습니다
그리고 상황에 따라서
attribute도 원하는데로
Custom해서
사용할 수 있습니다
이와 관련된 내용은
시간이 된다면!!
이번글은 왜 에러가
나는지만 쓰는 글이므로 !!