Apple is Apple

어제 과제를 하다가 뻘짓을 한게 떠올라 글을 써본다.

 

구현했으니 이제 확인해봐야지~ 하고 실행을 시키는데 앱이 계속 꺼진다..

 

분명? 틀린 것이 없다고 생각했는데 자꾸 꺼졌다 (흔한 맞왜틀)

 

로그캣을 살펴봤다...

 

java.lang.ClassCastException: androidx.constraintlayout.widget.ConstraintLayout cannot be cast to android.widget.Button

 

위 에러가 발생했다.

constraint layout은 Button 타입으로 캐스팅 될 수 없다는 의미인데.. 레이아웃이 위젯의 상위타입이 아니니...당연한 것이였다.

 

처음엔 코드를 다시 살펴봤는데 코드는 문제가 없어보였다. 그래서 xml로 가서 일일히 살펴보았다....

 

원인은 여기에 있었다.

 

회원가입 버튼에 id를 지정해놓았는데

    <Button
        android:id="@+id/button"
        ...
        />

constraint layout에 id에도 똑같이 지정해놓은것이였다..

<androidx.constraintlayout.widget.ConstraintLayout 
	xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@+id/button"
   ...
   />

이러고나서 findViewById를 통해 컴포넌트를 가져오는데

private val btnSignIn by lazy { findViewById<Button>(R.id.button) }

findViewById는 위에서부터 id값을 찾기 때문에(트리로 구성되어 순회한다.) 제일 상위에 있는 constraint layout의 id를 가져오게 된 것이다..

 

아마 복붙을 하다가 잘못들어간거 같다...

 

하나하나 확인을 잘하는 습관을 들여야겠다. 이상한 곳에서 시간낭비하지 않도록.... 

profile

Apple is Apple

@mjjjjjj