-
개인 과제 트러블 슈팅 - 인터페이스 변수 초기화Android 2024. 5. 9. 21:52
문제 상황
어댑터에서 정의한 인터페이스 변수의 함수가 구현체인 프래그먼트에서 실행되지 않는다.
로그캣도 찍어봤을때, isWork 가 안찍히는 것을 보아 값이 넘어가지 않은걸 확인할 수 있었다.
기존 코드
// 어댑터 var itemClickRemove: StoreItemDeleteListener? = null itemView.setOnClickListener { itemClickRemove?.deleteItem() } // 프래그먼트 override fun deleteItem(view: View, position: Int) { Log.d("isWork?","work") showDialog(position) }
원인
인터페이스 변수도 초기화를 해야하는데, 초기화 안한 상태에서 null 값으로 들어가서 ?. 엘비스 연산자로 예외가 발생하지 않고 값이 전달되지 않았다. (오히려 엘비스 연산자로 예외 처리가 안되니까 문제를 파악하기 더 힘들었던 것 같다)
해결 방법
인터페이스를 선언하고 나서는 null 값이다.
그래서, 초기화를 해야하는데 해당 인터페이스가 구현된 뷰를 가져오고 그 변수와 연결시키면 된다.
override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): ViewHolder { // 인터페이스 객체화 if(StoreFragment.getFragment() is StoreItemDeleteListener) { itemClickRemove = StoreFragment.getFragment() } else { throw RuntimeException("must implement Interface") } val binding = StoreLayoutBinding.inflate(LayoutInflater.from(parent.context), parent, false) return ViewHolder(binding, context) }
해결 시연 영상 추가로 팁인데 첨에 안드로이드 스튜디오에서 에뮬레이터 녹화했을 때 20MB 넘어가서 못올렸었는데
해상도를 낮추니 용량이 확 적어졌다. (당연한건가? 난 몰랐다..ㅎㅎ)
'Android' 카테고리의 다른 글
팀 프로젝트 트러블 슈팅 - viewmodel scope 의 범위 (0) 2024.05.11 팀 프로젝트 트러블 슈팅 - suspend fun, viewModelScope.launch (0) 2024.05.10 개인 과제 트러블 슈팅 - filter (0) 2024.05.08 개인 과제 트러블 슈팅 - 프래그먼트 트랜잭션 (0) 2024.05.07 시간복잡도 줄이기(약수의 개수) (0) 2024.05.03