Custom View 호출 에러(Unable to start activity ComponentInfo~)

Posted by ITPangPang
2016. 10. 16. 17:13 안드로이드 에러/RuntimeException


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해서

사용할 수 있습니다


이와 관련된 내용은

시간이 된다면!!


이번글은 왜 에러가

나는지만 쓰는 글이므로 !!