일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |
- 안드로이드 sunflower
- 막내의막무가내 알고리즘
- 안드로이드
- 막내의막무가내 일상
- 막내의막무가내 플러터
- 막무가내
- 막내의막무가내 rxjava
- 막내의막무가내 안드로이드
- 막내의 막무가내 알고리즘
- 막내의막무가내 코볼 COBOL
- 부스트코스
- 막내의막무가내 플러터 flutter
- 막내의막무가내 코틀린
- 막내의막무가내 코틀린 안드로이드
- 주엽역 생활맥주
- 2022년 6월 일상
- 안드로이드 Sunflower 스터디
- Fragment
- 막내의막무가내 프로그래밍
- 막내의막무가내 안드로이드 에러 해결
- 막내의막무가내 안드로이드 코틀린
- 부스트코스에이스
- 막내의 막무가내
- 주택가 잠실새내
- 프래그먼트
- 막내의막무가내
- flutter network call
- 막내의막무가내 SQL
- 프로그래머스 알고리즘
- 막내의막무가내 목표 및 회고
- Today
- Total
막내의 막무가내 프로그래밍 & 일상
[안드로이드] Spinner 사용시 해당 프래그먼트에서 다른 프래그먼트갔다가 돌아왔을 시 나는 에러 처리 (Fragment spinner error) 본문
[안드로이드] Spinner 사용시 해당 프래그먼트에서 다른 프래그먼트갔다가 돌아왔을 시 나는 에러 처리 (Fragment spinner error)
막무가내막내 2020. 9. 28. 18:11
[2021-04-14 업데이트]
java.lang.IllegalArgumentException: Parameter specified as non-null is null: method kotlin.jvm.internal.Intrinsics.checkParameterIsNotNull, parameter view
at com.mtjin.nomoneytrip.views.community.CommunityFragment$initView$1.onItemSelected(Unknown Source:7)
at android.widget.AdapterView.fireOnSelected(AdapterView.java:1366)
at android.widget.AdapterView.dispatchOnItemSelected(AdapterView.java:1355)
at android.widget.AdapterView.selectionChanged(AdapterView.java:1339)
at android.widget.AdapterView.checkSelectionChanged(AdapterView.java:1530)
at android.widget.AdapterView.handleDataChanged(AdapterView.java:1506)
at android.widget.AbsSpinner.onMeasure(AbsSpinner.java:191)
at android.widget.Spinner.onMeasure(Spinner.java:631)
at androidx.appcompat.widget.AppCompatSpinner.onMeasure(AppCompatSpinner.java:436)
at android.view.View.measure(View.java:24953)
스피너를 사용하는데 다른 프래그먼트로 이동했다가 백스택에 있는 스피너를 사용한 프래그먼트로 돌아 왔을 시 위와 같은 에러가 났습니다.
Spinner 의 AdapterView.OnItemSelectedListener 관련 에러였는데요.
문제는 onItemSelected() 콜백이 Android 프레임 워크에 의해 두 번 호출되고, 뷰 매개 변수가 처음에 null이고 두 번째로 인스턴스화되서 나는 에러였습니다.
이 문제를 해결하기 위해 두 가지 방법이 있습니다.
1. 기존 false(animate) 를 안붙이고 setSelection(0) 만 하엿는데 false 를 두 번째 매개변수로 넣어주면 해결됩니다.
애니메이션 매개 변수와 함께 사용하는 경우 onItemSelected는 setSelection을 수행 할 때 호출되지 않습니다. 애니메이션 매개 변수를 사용하지 않으면 setSelection이 즉시 onItemSelected를 호출합니다.
binding.spCities.setSelection(0, false)
이 방법을 사용시 처음 스피너색상이 안바뀌는 문제가 있어 저는 두번째 방법을 사용했습니다.
2. 두번째 방법입니다. View가 null 인지 체크하는 것입니다. 처음 onItemSelectedListener 에서 view가 nonNull 로 되어있는데 그것을 ?를 붙여 nullable 하게 바꿔주고 제가 널 체크를 해주도록 했습니다.
binding.spCities.onItemSelectedListener = object : AdapterView.OnItemSelectedListener {
override fun onItemSelected(
parent: AdapterView<*>,
view: View?,
position: Int,
id: Long
) {
view?.let {
viewModel.requestReviews((parent.getChildAt(0) as TextView).text.toString())
(parent.getChildAt(0) as TextView).setTextColor(thisContext.getMyColor(R.color.colorOrangeF79256))
}
}
override fun onNothingSelected(parent: AdapterView<*>) {
}
}
해결방법 참고한 곳 입니다. 여기서 더 자세히 보시면 될 것 같습니다.
댓글과 공감은 큰 힘이 됩니다. 감사합니다. !!
'안드로이드 > 코틀린 & 아키텍처 & Recent' 카테고리의 다른 글
[안드로이드] FCM 서버 통신과 노티피케이션 (feat.FCM, Notification, Retrofit2, 이전글 업데이트 버전 2020) (4) | 2020.10.10 |
---|---|
[안드로이드] Scoped Storage(범위지정 저장소) 정리 (Legacy Storage와 차이점 정리) (33) | 2020.09.29 |
[안드로이드] 하나의 바인딩어댑터에서 여러개의 리사이클러뷰 작업을 할 때 에러 처리 (0) | 2020.09.28 |
[안드로이드] 안드로이드 상태바(StatusBar) 투명 처리 (2) | 2020.09.20 |
[안드로이드] 안드로이드 CollapsingToolbarLayout UI 기록 (2) | 2020.09.19 |