마스터Q&A 안드로이드는 안드로이드 개발자들의 질문과 답변을 위한 지식 커뮤니티 사이트입니다. 안드로이드펍에서 운영하고 있습니다. [사용법, 운영진]

Inflate, nullpointerexception 에러입니다. [closed]

0 추천

Mainactivity에서 버튼을 눌러 framelayout에 미리 구현한 xml을 inflate해서 내부에 있는 Radiogroup의 상태를 다른 Activity에서 입력하여 변경하는 기능을 구현하는 도중에 에러가 났습니다. 에러 메세지는 다음과 같습니다.

java.lang.NullPointerException: Attempt to invoke virtual method 'void kr.co.comany.ihm_app.MainActivity.rg_clear(int)' on a null object reference
        at kr.co.comany.ihm_app.lvpopupActivity.onBackPressed(lvpopupActivity.java:97)
        at kr.co.comany.ihm_app.lvpopupActivity$4.onClick(lvpopupActivity.java:88)

아래 글은 구글링해서 얻은 결과인데 실력이 일천해서 알아듣기고 적용시키기가 어렵습니다. 도와주세요 ㅠㅠ

1. inflate로 추가한 라디오 그룹을 null로 인식하는 것 같습니다. 아래 두 문단은 구글링으로 얻은 결과인데 제가 실력이 미천한지라 알아듣고 적용하기가 어렵습니다.

Resource ID(XML Layout의 Child View)는 inflate() 시 Casting 에러로 APP이 종료되게 됩니다. Resource ID 별로 inflate 시킬수가 없습니다. 꼭 Layout을 inflate 시켜야 View를 얻을 수 있습니다.

 

2. infalte 된 View의 Child 라면 findViewById는 절대 inflate된 View.findViewById 로 찾아야 합니다. 아니면 View를 참조 할 수 없습니다.

 

질문을 종료한 이유: 스위치문을 잘못썼더군요..break구문 넣어주니 동작이 잘 됩니다. 허탈하네요 ㅎㅎ 도움에 감사드립니다.
Ed (180 포인트) 님이 2020년 12월 11일 질문
Ed님이 2020년 12월 12일 closed
btn_plus에서 inflate할 때 두번째 인자가 null인지 체크해 보시구요, null이 아니면, 마지막 인자를 false로 바꿔보세요.
e_1은 main에서 선언해놓은 frame layout인데요.
FrameLayout e_1 = findViewById(R.id.e_1);
이렇게 선언해서 쓰고 있습니다. framelayout에 미리 선언해놓은 xml만불러서 쓰고 있습니다. 미리 선언한 xml은 java연결된건 없고요...
마지막 인자 false로 하니까 그냥 튕겨버리는군요 ㅠㅠ

덧붙여 메인에서 inflate한 layout 안에 있는 메소드는 문제 없이 잘 돌아가더군요.
...