private fun initSpinner() { myAdapter = object : ArrayAdapter<String>(this, R.layout.spinner_item) { override fun getView(position: Int, convertView: View?, parent: ViewGroup): View { val v = super.getView(position, convertView, parent) if(position == count) { (v.findViewById<View>(R.id.tvSpinner) as TextView).text = "" (v.findViewById<View>(R.id.tvSpinner) as TextView).hint = getItem(count) } return v } override fun getCount(): Int { return super.getCount()-1 } } myAdapter.addAll(resources.getStringArray(R.array.teams_array).toMutableList()) binding.team.setAdapter(myAdapter) Log.d("스피너 호출 1", binding.team.selectedItem.toString()) binding.team.setSelection(binding.team.adapter.count, false) Log.d("스피너 호출 2", binding.team.selectedItem.toString()) binding.team.onItemSelectedListener = object : AdapterView.OnItemSelectedListener { override fun onItemSelected(p0: AdapterView<*>?, p1: View?, p2: Int, p3: Long) { Log.d("스피너 호출 3", binding.team.selectedItem.toString()) Log.d("스피너 호출 3-1", binding.team.adapter.count.toString()) Log.d("스피너 호출 3-2", binding.team.adapter.getItem(binding.team.adapter.count).toString()) } override fun onNothingSelected(p0: AdapterView<*>?) { } } }
아무런 입력 없이 해당 액티비티에서 화면만 회전시킨 로그는 아래처럼 찍힘
D/스피너 호출 1: 소프트웨어 연구소
D/스피너 호출 2: Select your team
D/onDestroy: 액티비티 파괴
D/스피너 호출 1: 소프트웨어 연구소
D/스피너 호출 2: Select your team
D/스피너 호출 3: 플랫폼개발팀
D/스피너 호출 3-1: 8
D/스피너 호출 3-2: Select your team
스피너에 들어가는 어레이 객체는
1. 소프트웨어 연구소
...
8. 플랫폼개발팀
9. select your team -> 얘를 힌트로 쓸거임
화면 회전 이전엔 setSelected() 이후에 리스너가 선언되서 그런지 스피너 호출 3 로그가 안보이는데,
회전 이후엔 setSelected() 이후에 리스너가 보이는 걸로 봐선
화면 회전하면서 액티비티 재생성 될 때 어댑터 관련된 뭐가 남는 건가 싶은데 문제가 뭔지 잘 모르겠어
회전 이후 로그만 순서대로 봐도 분명 setSelected() 하고 selectedItem 찍어보면 "Select your team"인데
갑자기 onItemSelected()에선 selectedItem()이 플랫폼개발팀으로 바뀌어 있고 ㅅㅂ..